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



只声明变量会在程序内存中为其保留空间吗?如果没有,那么请考虑以下代码片段:

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

此代码一进入 foo 就会在堆栈中分配一个空间并创建如下激活记录:


| 巴兹 |


| 酒吧 |


|

保存的电脑 |


| 一 |


| 乙 |

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

定义了

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

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

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

最新更新