intrinsic
pragma
指定對 's 引數清單中指定 pragma 之函式的呼叫是內建的。
語法
#pragma intrinsic(
function_1 [,
function_2 ... ])
備註
intrinsic
pragma 會告訴編譯器函式具有已知行為。 如果會產生較佳的效能,則編譯器可能會呼叫函式,而不會以內嵌指令取代函式呼叫。
內建形式的程式庫函式如下所列。 intrinsic
pragma 看到 之後,它會在包含指定內建函式的第一個函式定義中生效。 效果會繼續到來源檔案的結尾,或指定相同內建函式的外觀 function
pragma 。 intrinsic
pragma 只能在全域層級的函式定義之外使用 。
下列函式具有內建形式,而且當您指定 /Oi
時會使用內建表單:
使用內建函式的程式較快,因為它們沒有函式呼叫的額外負荷。 不過,它們可能會因為產生的額外程式碼而變大。
x86 特定範例
和 _enable
內部 _disable
函數會產生核心模式指示來停用或啟用中斷,而且在核心模式驅動程式中很有用。
使用 從命令列 cl -c -FAs sample.c
編譯下列程式碼,並查看 sample.asm
它們是否變成 x86 指示 CLI 和 STI:
// 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() {
}
內建浮點函式
這些浮點函式沒有真正的內建形式。 相反地,它們具有將引數直接傳遞至浮點晶片的版本,而不是將引數推送到堆疊上:
當您指定 /Oi
和 /fp:fast
時,這些浮點函式具有真正的內建形式(或任何包含 /Oi
: /Ox
、 /O1
和 /O2
的選項):
您可以使用 /fp:strict
或 /Za
來覆寫真實內建浮點數選項的產生。 在這種情況下,函式會產生為程式庫常式,將引數直接傳遞至浮點晶片,而不是將引數推送至程式堆疊。
如需如何啟用和停用來源文字區塊內建函式的資訊和範例,請參閱 #pragma function
。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應