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