簡體   English   中英

C++ function 指針的地址不變性

[英]C++ function pointer's address invariance

我知道 function 指針的地址在各種編譯單元之間不會改變。

struct Interface
{
   void sum(int, int);
};

例如, &Interface::sum將在不同單位之間產生相同的值(我錯了嗎?)。

  1. 這在多大程度上成立? 在不同的機器、系統上編譯時地址是否相同?
  2. function 地址能否成為在公共 header 中使用的可靠工具? 例如,將其用於內部映射或標簽調度。

我懷疑使用不同的編譯器時可能會有所不同。

我問這個假設我們有相同大小的 function 指針(即 x64)。

首先,我想強調一下, sum是一種方法這一事實與答案無關。

其次,所有編譯單元的地址都相同,因為它是最有效的 - 否則,您必須在可執行文件中復制sum 如果它只在一個地方,每個呼叫者都可以在那里call

第三,即使重新運行程序,地址也可能不一樣。 如果可執行文件加載到相同的基地址,它可能會,但不能保證。 因此,地址也不能保證在不同的機器/系統上相同,並且不是在 header 文件中使用的可靠工具。

最后,不同的編譯器,甚至在稍微更改代碼后使用相同的編譯器,可能會將sum放在可執行文件中的不同位置,因此您的最終懷疑是正確的。

暫無
暫無

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

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