仅声明变量是否在程序存储器中为其保留空间?如果没有,那么请考虑以下片段:
void foo(int bar, int baz){
int a;
char b[4];
}
这段代码一进入foo,就会在堆栈中分配一个空格并创建一个如下的激活记录:
那么,这个激活记录如何为a和b分配空间,即使它们只是声明而且没有定义?
答案 0 :(得分:2)
a
和b
已定义但未使用。由于程序无法判断它们是否已创建,因此编译器可以自由忽略它们。
答案 1 :(得分:1)
不一定,在某些优化条件下,编译器可能会选择丢弃未初始化变量占用的空间。但是总是建议从代码中删除从未使用过的变量。
在一般情况下,假设32位系统,您的编译器将在堆栈中撤出至少4 + 4字节的空间,以保存将来可能使用的变量数据。