[英]C++ function pointer's address invariance
我知道 function 指針的地址在各種編譯單元之間不會改變。
struct Interface
{
void sum(int, int);
};
例如, &Interface::sum
將在不同單位之間產生相同的值(我錯了嗎?)。
我懷疑使用不同的編譯器時可能會有所不同。
我問這個假設我們有相同大小的 function 指針(即 x64)。
首先,我想強調一下, sum
是一種方法這一事實與答案無關。
其次,所有編譯單元的地址都相同,因為它是最有效的 - 否則,您必須在可執行文件中復制sum
。 如果它只在一個地方,每個呼叫者都可以在那里call
。
第三,即使重新運行程序,地址也可能不一樣。 如果可執行文件加載到相同的基地址,它可能會,但不能保證。 因此,地址也不能保證在不同的機器/系統上相同,並且不是在 header 文件中使用的可靠工具。
最后,不同的編譯器,甚至在稍微更改代碼后使用相同的編譯器,可能會將sum
放在可執行文件中的不同位置,因此您的最終懷疑是正確的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.