編譯器內建
大部份的函式都包含在程式庫中,但有些函式是內建 (也就是內建) 到編譯器。 這些稱為內建函式或內建。
備註
如果函式是內建的,則該函式的程式碼通常是以內嵌方式插入,避免函式呼叫的額外負荷,並可針對該函式發出高效率的機器指令。 內建函式經常比對等的內嵌組件來得快,因為最佳化工具具有內建知識,知道有多少內建函式在運作,因此可以使用在使用內嵌組件時無法使用的某些最佳化。 此外,最佳化工具可以用不同方式擴充內建函式、以不同方式對齊緩衝區,或是根據呼叫的內容和引數進行其他調整。
使用內建函式會影響程式碼的可攜性,因為如果程式碼是使用其他編譯器所編譯,Visual C++ 中可用的內建函式可能無法使用,而且在某些目標架構中可能可用的某些內建函式,對於所有架構會無法使用。 然而,內建函式的可攜性通常高於內嵌組件。 在不支援內嵌組件的 64 位元架構上必須有內建函式。
某些內建函式 (如 __assume 和 __ReadWriteBarrier) 會提供資訊給編譯器,這會影響最佳化工具的行為。
某些內建函式僅以內建函式的形式提供使用,而有些內建函式則是在函式和內建實作中都提供使用。 您可以指示編譯器以兩種方式之一使用內建實作,取決於您是只要啟用特定的函式,還是想要啟用所有的內建函式。 第一種方式是使用 #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 >,可宣告通用內建函式的原型。 <immintrin.h> 和 <ammintrin.h> 標頭檔中提供製造商特定內建函式。 此外,某些 Windows 標頭宣告對應到編譯器內建函式上的函式。
下列各節會列出各種架構上可用的所有內建函式。 如需有關內建函式在特定目標處理器上之運作方式的詳細資訊,請參閱製造商的參考文件。