+ -
当前位置:首页 → 问答吧 → 弱弱的问个问题。

弱弱的问个问题。

时间:2010-08-27

来源:互联网

char buf[1024]
for(i=0;i<100;i++)
{
}



for(i=0;i<100;i++)
{
    char buf[1024]
}
gcc都不会报错,两者有质上的区别吗?我担心下面一段会在栈里分配100次1024字节空间。会有这中可能吗?

作者: djking1986   发布时间: 2010-08-27

本帖最后由 prolj 于 2010-08-27 13:18 编辑

char buf[1024]
for(i=0;i<100;i++)
{
}



for(i=0;i<100;i++)
{
    char buf[1024]
}

char buf[1024]后面没有;编译不报错么?

作者: prolj   发布时间: 2010-08-27

不会

作者: hellioncu   发布时间: 2010-08-27



QUOTE:
char buf[1024]
for(i=0;i
djking1986 发表于 2010-08-27 11:29




    确实分配了100次,但每次都分配完就撤销,下次再在原地分配,再撤销。。。

作者: liwangli1983   发布时间: 2010-08-27

什么时候撤销呢...

作者: pandaiam   发布时间: 2010-08-27

出了作用域应该就撤销了

作者: daybreakcx   发布时间: 2010-08-27

我已经可以想象到ebp来回增减的的运行状态了。

作者: davelv   发布时间: 2010-08-27

回复 daybreakcx


    gcc中一个for是一个独立的域吗?我只知道一个函数是一个独立的域。

作者: djking1986   发布时间: 2010-08-27

回复 davelv


    能不能说得清楚一点啊 让我也明白一点 为什么会减?

作者: djking1986   发布时间: 2010-08-27

回复 liwangli1983


    这个机制只有gcc特有吗?

作者: djking1986   发布时间: 2010-08-27

有人能说明下for循环的时候栈是如何变化的吗?如果能用汇编描述一下是最好的了。谢谢

作者: djking1986   发布时间: 2010-08-27



QUOTE:
我已经可以想象到ebp来回增减的的运行状态了。
davelv 发表于 2010-08-27 12:36




是esp还是ebp?

作者: towardWang   发布时间: 2010-08-27

csdn中同一个问题的说法:
http://topic.csdn.net/u/20080318 ... d-37f9e967990b.html

作者: djking1986   发布时间: 2010-08-27

有人说一个{}之后就会自动释放局部变量。为什么?

作者: djking1986   发布时间: 2010-08-27

因为他的作用域就是在{}内!!!还不懂就找书看去

作者: pengjianbokobe   发布时间: 2010-08-27

块变量你们都不知道吗

作者: @sky   发布时间: 2010-08-27