簡體   English   中英

標准庫實現中__builtin_前綴的含義是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM