将晦涩难懂的技术讲的通俗易懂
分类: C/C++
2014-11-04 22:40:47
在VS2010,进行调试的时候,发现连续定义的int变量,地址相差12个字节。具体程序如下:
int _tmain(int argc, _TCHAR* argv[])
{
int a0,a1,a2,a3;
a0=0x1;
a1=0x2;
a2=0x3;
a3=0x4;
int *a[4];
a[0]=&a0;
a[1]=&a1;
a[2]=&a2;
a[3]=&a3;
for (int i=0;i<4;i++)
{
printf("%x\n",a[i]);
}
return 0;
}
输出:
可以发现a1、a2、a3、a4的地址都是相差12个字节。正常情况不是应该4个字节码?这是为什么呢?我们先在linux下试下,输出结果为:
是4个字节没问题。难道是编译器不同的原因吗?
其实不是的,这是因为VS2010在Debug模式下,int变量占用12个字节。可以这样认为,Debug模式下,在int变量的附近增加了8个字节,用于存储调试信息。当我们把模式设为Release,就会发现栈上连续定义的int变量,地址相差4个字节。注意:栈上地址从高向低增长。
设置Release模式:
再次运行之前的程序,输出结果为:
正如我们之前预料的,Release模式下int变为正常的4个字节。