vc++局部变量为什么在栈中不紧挨存放,而全局变量却是紧挨存放的?

hishopsoft 2011-12-07 05:21:35
#include "stdafx.h"
int a=0;
int b=0;
int c=0;
int _tmain(int argc, _TCHAR* argv[])
{
int i=0;
int j=0;
int n=0;
printf("%d\n",&a);
printf("%d\n",&b);
printf("%d\n",&c);
printf("%d\n",&i);
printf("%d\n",&j);
printf("%d\n",&n);
return 0;
}

执行后输出的地址为:
//a,b,c紧挨存放
4289716
4289720
4289724
//i,j,n却间隔12h(18)个字节。。
1245024
1245012
1245000

这样做不就很浪费本就不宽裕的栈空间吗?
不知道vc++这样做是基于什么考虑的,为什么不能也紧挨存放呢?
谢谢
...全文
73 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yisikaipu 2011-12-07
  • 打赏
  • 举报
回复
严格地说,即使不论填充与对齐,c++标准也不保证变量一定是连续放以及一定按你希望的先后顺序放,所以啊,尽量不要把这个做为规律来用
hishopsoft 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yisikaipu 的回复:]

默认debug版开启了/RTCs选项,用作栈帧检测,调试用,关闭或者默认release下试试吧
http://msdn.microsoft.com/en-us/library/8wtf2dfz(v=VS.90).aspx
[/Quote]

果然是这个问题。。release 就正常连续存放了。。。
谢谢
yisikaipu 2011-12-07
  • 打赏
  • 举报
回复
默认debug版开启了/RTCs选项,用作栈帧检测,调试用,关闭或者默认release下试试吧
http://msdn.microsoft.com/en-us/library/8wtf2dfz(v=VS.90).aspx
ndy_w 2011-12-07
  • 打赏
  • 举报
回复
不对啊...栈也是连续放的

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧