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