Share via


編譯器內建函式

大部份的函數都包含在程式庫,但是有些函式內建的 (也就是內建) 給編譯器。 這些稱為內建函式或內建函式。

備註

如果內建函式,該函式的程式碼是以避免在函式呼叫的額外負荷,並可讓發出該函式的高效率的機器指令的通常是插入的內嵌。 內建通常是較快,對等的內嵌組譯碼,因為這樣可以提供某些最佳化,最佳化器具有內建的幾個內建函式的行為,知識時無法使用時,會使用內嵌組譯碼。 此外,最佳化器可以擴展內建以不同的方式、 對齊緩衝區以不同的方式,或做其他調整,取決於內容和呼叫的引數。

使用內建函式會影響可攜性程式碼,,因為 Visual C++ 中,您可以使用內建函式可能無法使用如果程式碼會以其他編譯器編譯且可用的某些目標架構的某些內建函式並不適用於所有的架構。 然而,內建函式是通常比內嵌組譯碼更具移植。 內建函式必須在 64 位元架構不支援內嵌組譯碼位置上。

某些內建值,例如__assume和__ReadWriteBarrier,提供資訊給編譯器,將影響 [最佳化器的行為。

僅為內建值,有一些內建函式,有些則是在函式和內建實作。 您可以指示編譯器使用的內建的實作中其中一種方式,取決於您是否要啟用特定的功能,或您想要啟用所有的內建函式。 The first way is to use #pragma intrinsic(intrinsic-function-name-list). Pragma 可用於指定內建的單一或多個內建函式以逗點分隔。 第二個是使用 /Oi (產生內建函式) 編譯器選項,將所有的內建函式可以在所屬的平台使用。 在**/Oi**,使用#pragma function(intrinsic-function-name-list) ,強制用來取代內建的函式呼叫。 如果內建在特定的文件備忘稿,常式只是可為內建,那麼無論是否使用內建的實作,是**/Oi**或#pragma intrinsic 所指定。 在所有情況下, /Oi或#pragma intrinsic允許,但不會強制,最佳化器使用內建。 最佳化器仍可以呼叫此函式。

某些標準的 C/C++ 程式庫函式可用於某些架構上的內建實作。 如果在呼叫的 CRT 函式時,就會使用內建實作**/Oi**命令列上指定。

標頭檔,Intrin.h,就可以使用所宣告的內建的函式的原型。 此外,某些視窗標頭宣告對應到編譯器內建的函式。

下面幾節會列出所有內建函式所使用的各種不同的架構。 如需有關如何在特定目標的處理器上的內建函式的運作方式的詳細資訊,請參閱製造商的參考文件。

請參閱

參考

C + + 關鍵字

其他資源

ARM 組譯工具參考

Microsoft 巨集組合語言的參考

C 執行階段程式庫參考