[英]what is the meaning of __builtin_ prefix in standard library implementation?
在我的標准庫實現的源文件中,我可以看到許多名稱帶有__builtin_
前綴的方法,即__builtin_memmove
。 這是什么意思? 這些方法在什么意義上是內置的 ?
template<bool _IsMove>
struct __copy_move<_IsMove, true, random_access_iterator_tag>
{
template<typename _Tp>
static _Tp*
__copy_m(const _Tp* __first, const _Tp* __last, _Tp* __result)
{
__builtin_memmove(__result, __first,
sizeof(_Tp) * (__last - __first));
return __result + (__last - __first);
}
};
這些只是對二進制代碼的調用嗎? 調試器無法介入。
這只是編譯器的內部實現,對於gcc
我們可以轉到他們的文檔以更好地理解它們: GCC提供的其他內置函數 ,它說:
除了上述功能外,GCC還提供了大量內置功能。 其中一些是供內部使用,用於處理異常或變長參數列表,在此不做記錄,因為它們可能會不時更改。 我們不建議您一般使用這些功能。
提供其余功能是出於優化目的。
GCC在標准C庫中包括許多功能的內置版本。 即使指定了-fno-builtin選項,帶_ 內置前綴的版本始終被視為與C庫函數具有相同的含義。
如果我們轉到“ 選項控制C語言”,它對-fno-builtin-function
標志( 強調mine )說:
[...] GCC通常會生成特殊代碼以更有效地處理某些內置函數; 例如,對alloca的調用可能成為直接調整堆棧的單個指令,而對memcpy的調用可能成為內聯復制循環。 生成的代碼通常更小且更快,但是由於函數調用不再像這樣出現,因此您無法在這些調用上設置斷點 ,也無法通過鏈接到其他庫來更改函數的行為。[... ]
對於clang
你去這里 。
這不是關鍵字,它只是GCC和Clang對編譯器內置函數遵循的命名約定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.