簡體   English   中英

為什么在增加的內存位置中沒有連續定義的變量?

[英]Why aren't consecutively-defined variables in increasing memory locations?

如果我們采用以下代碼:

int height = 10;
int width = 5;
printf(
    "The memory address of height is: %p\n"
    "The memory address of width is:  %p\n",
    &height, &width
);

我得到以下打印:

The memory address of height is: 0x7ffeed809a78
The memory address of width is:  0x7ffeed809a74

我期望寬度位於0x7ffee8843a7c位置。 換句話說,它正在執行&height - 1而不是&height + 1 為什么呢?

他們沒有理由這樣做,所以編譯器會為自己做最好的事情。

復雜的編譯器優化和高效的線性內存布局不能同時進行,因此犧牲了線性內存布局。

當您使用哈希表時,您將了解最有效的算法如何導致可重復的偽隨機輸出順序。 編譯時符號名稱會加載到哈希表中; 並且函數內存空間可以通過迭代全局符號表來布局,因此它是任意順序的。

一般來說,你會發現這是真的。 每當未指定順序時,它就會下降,而當算法不平凡時,它就不再簡單了。

永遠不要依賴於內存布局中的符號順序。 這不被允許。

暫無
暫無

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

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