变量定义和给定的地址

时间:2012-12-18 09:30:37

标签: c memory-management

当我写:

int a;
int c;

OR

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

3 个答案:

答案 0 :(得分:3)

不,您不能保证ac位于内存的相邻位置,但通常情况就是如此。我相信通常 &a - 1将等于&c,因为堆栈通常向下增长。

如果你想要连续变量,那就使用一个数组。

  

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

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


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

答案 1 :(得分:1)

编译器可以随意将它们放在任何地方。没有办法保证他们的位置。当您需要它们时,您可以将它们声明为包含两个元素的数组。

答案 2 :(得分:1)

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

即使你观察到这些事情,你也不能依赖它,没有实际用途。