2 msdnwolaile msdnwolaile 于 2016.04.10 23:05 提问

关于栈区分配空间问题??不是说好的从高到底吗??

局部变量不应该都存在在栈区吗??为什么分配的地址感觉好像是从低到高??
为什么运行结果是下面的样子啊??不明白,求教??

 include <iostream>                                                                                                                             
using namespace std;

int main()
{
        int a,b,c;
        cout<<&a<<endl;
        cout<<&b<<endl;
        cout<<&c<<endl;

        return 0;
}

运行结果:
0x7ffc7e23abb4
0x7ffc7e23abb8
0x7ffc7e23abbc

5个回答

caozhy
caozhy   Ds   Rxr 2016.04.10 23:20

你什么编译器,我这里VC++ 6.0没问题
0013FF3C
0013FF38
0013FF34
Press any key to continue

msdnwolaile
msdnwolaile 回复caozhy: 那你的意思是:关于堆栈的增长方向,所谓的堆的增长方向是向着内存增加的方向,栈的增长方向是向着内存地址减小的方向,这句话仅仅是真对于window系统而言的吗??如果是的话,那就好理解了,,
一年多之前 回复
caozhy
caozhy 回复L未若: 堆栈的方向是操作系统决定的。
一年多之前 回复
msdnwolaile
msdnwolaile 嗯嗯,我用的是Linux,不太明白为什么这样,刚才我也试了试,dev-C++也是你上面这样,结果比较合理!!,不明白linux下为什么这样???,难道真的跟系统有关,不会吧??
一年多之前 回复
caozhy
caozhy   Ds   Rxr 2016.04.10 23:22

0xff8a578c
0xff8a5788
0xff8a5784
这是GCC的编译结果,也是对的。

msdnwolaile
msdnwolaile 这里用的是:g++,
一年多之前 回复
lm_whales
lm_whales   Rxr 2016.04.10 23:42

具体如何,还取决于 编译器编译时候的配置和状态,例如增量编译
最合理的是顺序配置,这样省时省力,编译器也不需要额外做些什么

zhangmeng1021
zhangmeng1021   2016.04.11 10:13

我猜测是gcc版本或者编译器优化,gcc版本更大一点,你可以拿GDB试一下看看他怎么分配的内存。理论是堆低到高栈高到低。

oyljerry
oyljerry   Ds   Rxr 2016.04.10 23:10

这个具体分配方向取决于编译器和os

msdnwolaile
msdnwolaile 不对,我觉得这个问题不能简单的归结与编译器或者os,肯定有其他更好的说法或者解释!!!
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!