我想弄清楚地址如何分配给位于堆栈上的变量。我跑到下面的小程序:意外的地址输出
int main()
{
long a;
int b;
int c;
printf("&a = %p\n", &a);
printf("&b = %p\n", &b);
printf("&c = %p\n", &c);
}
我的预期是(考虑地址正在下降)输出:
&a = 0x7fff6e1acb88
&b = 0x7fff6e1acb80
&c = 0x7fff6e1acb7c
而是我的了:
&a = 0x7fff6e1acb88
&b = 0x7fff6e1acb80
&c = 0x7fff6e1acb84
怎么来的c
变量位于a
和b
变量之间?变量不会在声明时放在堆栈上吗?
我试图从long
更换的a
类型int
,我得到这个:
&a = 0x7fff48466a74
&b = 0x7fff48466a78
&c = 0x7fff48466a7c
在这里,我不明白为什么是往上走的地址,而他们以前下降了?
我编译的程序使用gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-11precise2)
,如果这有什么帮助。
他们甚至不必在堆栈中。如果你不查询他们的地址,他们通常只在寄存器中。 – glglgl
正确;好点子。 –