gpt4 book ai didi

c - 为什么连续定义的变量不在增加的内存位置中?

转载 作者:行者123 更新时间:2023-11-30 20:52:45 26 4
gpt4 key购买 nike

如果我们采用以下代码:

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。为什么会这样?

最佳答案

它们没有理由这样做,因此编译器会做最适合自己的事情。

复杂的编译器优化和高效的线性内存布局并不同时存在,因此牺牲了线性内存布局。

当您接触哈希表时,您将了解最有效的算法如何产生可重复的伪随机输出顺序。编译时符号名称被加载到哈希表中;并且函数内存空间可以通过迭代全局符号表来布局,因此可以采用某种任意顺序。

一般来说,你会发现这是真的。然而,每当未指定顺序时,它就会下降,而当算法不平凡时,它就不再简单了。

永远不要依赖内存布局中符号的顺序。这是不允许的。

关于c - 为什么连续定义的变量不在增加的内存位置中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57763351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com