簡體   English   中英

外部內聯函數必須在所有翻譯單元中具有相同的地址。 這是怎么回事?

[英]Extern inline functions must have the same address in all translation units. How the heck is that achieved?

根據該標准,extern內聯函數在所有翻譯單元中必須具有相同的地址。

如何在編譯器中實現? 我的意思是當我編譯一些翻譯單元時,我不知道其他TU會是什么樣的。 那我怎么能到處都有相同的地址呢?

這取決於實現,但通常由鏈接器解決。 每個編譯的翻譯單元將生成一個包含該函數副本的目標文件,以某種方式標記,以便鏈接器知道它應該期望(和接受)重復。 鏈接器將包含其中一個,丟棄其他鏈接器,並解析對該函數的任何引用。

簡單策略:每次定義這樣的inline函數時,將其編譯為對象時間,就像它是一個普通函數一樣。 然后,在鏈接時,檢測重復的功能並刪除它們,留下每個功能的一個副本。 這就是大約10年前C ++編譯器過去(也是面對模板)的工作方式。 現在還不確定他們是怎么做的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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