1

当我写:

int a;
int c;

或者

int a, c;
  • 什么时候ac存储在内存中的相邻位置?((&a+1)等于&c?)
  • 你定义它们的方式对此有影响吗?还是只取决于机器?
4

3 回答 3

3

不,您不能保证a并且c在内存中的相邻位置,但通常是这种情况。我相信通常 &a - 1会等于&c堆栈通常向下增长。

如果您想要连续变量,请使用数组。

你定义它们的方式对此有影响吗?

通常,除非必须,否则编译器不会重新排序。例如,为了满足某些对齐或出于性能原因。


此外,正如 Mysticial 所说,编译器有时可以优化变量,使它们根本不存在于内存中。

于 2012-12-18T09:32:23.517 回答
1

编译器可以随意放置它们。无法保证它们的放置位置。当您需要它们相邻时,您可以将它们声明为具有两个元素的数组。

于 2012-12-18T09:33:13.137 回答
1

在任何一种情况下,都没有必要将整数ac相邻存储。C标准没有规定这样的事情。

即使你观​​察到这样的事情,你也不能依靠它来做任何事情,也没有实际用处。

于 2012-12-18T09:33:55.953 回答