首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

函数中的局部变量不是都在栈下面吗?为什么三个连续的变量,地址不是连续的

2013-03-20 
函数中的局部变量不是都在栈上面吗?为什么三个连续的变量,地址不是连续的?下面输出的三个地址,并不是连续

函数中的局部变量不是都在栈上面吗?为什么三个连续的变量,地址不是连续的?
下面输出的三个地址,并不是连续的,为什么?






int i1;
int i2;
int i3;

cout<<&i1<<endl;
cout<<&i2<<endl;
cout<<&i3<<endl;



[解决办法]
release编译看看
[解决办法]
Release下编译 。
[解决办法]
引用:
栈区不是连续存放吗?很多书都这样写啊。。

引用:
谁说过是连续的


栈内数据当然是连续的,但没说你的变量必须是连续的。很多编译器在debug版时会在变量之间放一些无用数据填充。
[解决办法]
绝大部分编译器在Debug下,会在所分配的空间前/后添加一些额外的空间,并根据不同的情况为这些额外的空间设定特定的初值。当这些初值被用户程序修改时,就说明程序发生了越界等错误行为。
在Release下,将取消这些额外的空间,并进行优化(如果你定义的变量(部分类对象除外,因为类有构造和析构)未被使用过,将被忽略,也就是说,不会为它分配空间)。
[解决办法]
这个地址是连续的,只是debug版本在每个变量两边增加了,若干数据。变量尺寸变大了。
32Bits 的int通常是4字节,但是debug版本,实际上分配了12字节,左右各4字节。
于是好像不连续了。实际按照12字节算的话还是连续的。

热点排行