intrinsic
pragma
Menentukan bahwa panggilan ke fungsi yang ditentukan dalam pragmadaftar argumen adalah intrinsik.
#pragma intrinsic(
function_1 [,
function_2 ... ])
intrinsic
pragma memberi tahu pengkompilasi bahwa fungsi memiliki perilaku yang diketahui. Pengkompilasi dapat memanggil fungsi dan tidak mengganti panggilan fungsi dengan instruksi sebaris, jika akan menghasilkan performa yang lebih baik.
Fungsi pustaka dengan formulir intrinsik tercantum di bawah ini.
intrinsic
pragma Setelah terlihat, itu berlaku pada definisi fungsi pertama yang berisi fungsi intrinsik tertentu. Efek berlanjut ke akhir file sumber atau ke tampilan yang function
pragma menentukan fungsi intrinsik yang sama. hanya intrinsic
pragma dapat digunakan di luar definisi fungsi, di tingkat global.
Fungsi berikut memiliki bentuk intrinsik, dan bentuk intrinsik digunakan saat Anda menentukan /Oi
:
Program yang menggunakan fungsi intrinsik lebih cepat karena tidak memiliki overhead panggilan fungsi. Namun, kode mungkin lebih besar karena kode tambahan yang dihasilkan.
Intrinsik _disable
dan _enable
menghasilkan instruksi mode kernel untuk menonaktifkan atau mengaktifkan interupsi, dan dapat berguna dalam driver mode kernel.
Kompilasi kode berikut dari baris perintah dengan cl -c -FAs sample.c
dan lihat sample.asm
untuk melihat bahwa kode tersebut berubah menjadi CLI dan STI instruksi x86:
// pragma_directive_intrinsic.cpp
// processor: x86
#include <dos.h> // definitions for _disable, _enable
#pragma intrinsic(_disable)
#pragma intrinsic(_enable)
void f1(void) {
_disable();
// do some work here that should not be interrupted
_enable();
}
int main() {
}
Fungsi floating-point ini tidak memiliki bentuk intrinsik yang sebenarnya. Sebaliknya, mereka memiliki versi yang meneruskan argumen langsung ke chip floating-point, daripada mendorongnya pada tumpukan:
Fungsi floating-point ini memiliki bentuk intrinsik yang sebenarnya ketika Anda menentukan /Oi
dan (atau opsi apa pun yang mencakup /fp:fast
: /Oi
, /Ox
, dan /O1
/O2
):
Anda dapat menggunakan /fp:strict
atau /Za
untuk mengambil alih pembuatan opsi floating-point intrinsik sejati. Dalam hal ini, fungsi dihasilkan sebagai rutinitas pustaka yang meneruskan argumen langsung ke chip floating-point alih-alih mendorongnya ke tumpukan program.
Lihat #pragma function
untuk informasi dan contoh tentang cara mengaktifkan dan menonaktifkan intrinsik untuk blok teks sumber.
arahan Pragma dan kata kunci __pragma
dan _Pragma
Intrinsik pengkompilasi