为变量和激活记录保留空间

时间:2012-10-06 18:48:46

标签: c++ c memory stack

仅声明变量是否在程序存储器中为其保留空间?如果没有,那么请考虑以下片段:

void foo(int bar, int baz){
int a;
char b[4];
}

这段代码一进入foo,就会在堆栈中分配一个空格并创建一个如下的激活记录:


|巴兹|


|吧|


|保存了PC |


| a |


| b |

那么,这个激活记录如何为a和b分配空间,即使它们只是声明而且没有定义?

2 个答案:

答案 0 :(得分:2)

ab已定义但未使用。由于程序无法判断它们是否已创建,因此编译器可以自由忽略它们。

答案 1 :(得分:1)

不一定,在某些优化条件下,编译器可能会选择丢弃未初始化变量占用的空间。但是总是建议从代码中删除从未使用过的变量。

在一般情况下,假设32位系统,您的编译器将在堆栈中撤出至少4 + 4字节的空间,以保存将来可能使用的变量数据。