Bagikan melalui


Intrinsik kompiler

Sebagian besar fungsi terkandung dalam pustaka, tetapi beberapa fungsi dibangun (yaitu, intrinsik) ke pengkompilasi. Ini disebut sebagai fungsi intrinsik atau intrinsik.

Keterangan

Jika fungsi adalah intrinsik, kode untuk fungsi tersebut biasanya dimasukkan sebaris, menghindari overhead panggilan fungsi dan memungkinkan instruksi komputer yang sangat efisien untuk dipancarkan untuk fungsi tersebut. Intrinsik sering kali lebih cepat daripada rakitan sebaris yang setara, karena pengoptimal memiliki pengetahuan bawaan tentang berapa banyak intrinsik yang bertingkah, sehingga beberapa pengoptimalan dapat tersedia yang tidak tersedia saat rakitan sebaris digunakan. Selain itu, pengoptimal dapat memperluas intrinsik secara berbeda, menyelaraskan buffer secara berbeda, atau membuat penyesuaian lain tergantung pada konteks dan argumen panggilan.

Penggunaan intrinsik memengaruhi portabilitas kode, karena intrinsik yang tersedia di Visual C++ mungkin tidak tersedia jika kode dikompilasi dengan pengkompilasi lain dan beberapa intrinsik yang mungkin tersedia untuk beberapa arsitektur target tidak tersedia untuk semua arsitektur. Namun, intrinsik biasanya lebih portabel daripada rakitan sebaris. Intrinsik diperlukan pada arsitektur 64-bit di mana rakitan sebaris tidak didukung.

Beberapa intrinsik, seperti __assume dan __ReadWriteBarrier, memberikan informasi kepada pengkompilasi, yang memengaruhi perilaku pengoptimal.

Beberapa intrinsik hanya tersedia sebagai intrinsik, dan beberapa tersedia baik dalam implementasi fungsi maupun intrinsik. Anda dapat menginstruksikan pengkompilasi untuk menggunakan implementasi intrinsik dengan salah satu dari dua cara, tergantung pada apakah Anda hanya ingin mengaktifkan fungsi tertentu atau Anda ingin mengaktifkan semua intrinsik. Cara pertama adalah menggunakan #pragma intrinsic(intrinsic-function-name-list). Pragma dapat digunakan untuk menentukan satu intrinsik atau beberapa intrinsik yang dipisahkan oleh koma. Yang kedua adalah menggunakan opsi kompilator /Oi (Hasilkan fungsi intrinsik), yang membuat semua intrinsik pada platform tertentu tersedia. Di bawah /Oi, gunakan #pragma function(intrinsic-function-name-list) untuk memaksa panggilan fungsi digunakan alih-alih intrinsik. Jika dokumentasi untuk catatan intrinsik tertentu mencatat bahwa rutinitas hanya tersedia sebagai intrinsik, maka implementasi intrinsik digunakan terlepas dari apakah /Oi atau #pragma intrinsic ditentukan. Dalam semua kasus, /Oi atau #pragma intrinsic memungkinkan, tetapi tidak memaksa, pengoptimal untuk menggunakan intrinsik. Pengoptimal masih dapat memanggil fungsi .

Beberapa fungsi pustaka C/C++ standar tersedia dalam implementasi intrinsik pada beberapa arsitektur. Saat memanggil fungsi CRT, implementasi intrinsik digunakan jika /Oi ditentukan pada baris perintah.

File header, <intrin.h>, tersedia yang mendeklarasikan prototipe untuk fungsi intrinsik umum. Intrinsik khusus produsen tersedia dalam <file header immintrin.h> dan <ammintrin.h> . Selain itu, header Windows tertentu mendeklarasikan fungsi yang memetakan ke intrinsik pengkompilasi.

Bagian berikut mencantumkan semua intrinsik yang tersedia di berbagai arsitektur. Untuk informasi selengkapnya tentang cara kerja intrinsik pada prosesor target khusus Anda, lihat dokumentasi referensi produsen.

Baca juga

Referensi perakitan ARM
Referensi Microsoft Macro Assembler
Kata kunci
Referensi pustaka run-time C