Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1814095
  • 博文数量: 159
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5649
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-23 18:56
个人简介

将晦涩难懂的技术讲的通俗易懂

文章分类

全部博文(159)

文章存档

2019年(13)

2018年(19)

2017年(9)

2016年(26)

2015年(18)

2014年(54)

2013年(20)

分类: C/C++

2014-11-04 22:40:47

vs栈上连续定义的int变量,地址相差12个字节

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;

}

输出:

可以发现a1a2a3a4的地址都是相差12个字节。正常情况不是应该4个字节码?这是为什么呢?我们先在linux下试下,输出结果为:

4个字节没问题。难道是编译器不同的原因吗?

其实不是的,这是因为VS2010Debug模式下,int变量占用12个字节。可以这样认为,Debug模式下,在int变量的附近增加了8个字节,用于存储调试信息。当我们把模式设为Release,就会发现栈上连续定义的int变量,地址相差4个字节。注意:栈上地址从高向低增长。

设置Release模式:

 

再次运行之前的程序,输出结果为:

正如我们之前预料的,Release模式下int变为正常的4个字节。

阅读(3055) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册