繁体   English   中英

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

[英]Reserving space for variables and activation record

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

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

这段代码一旦输入foo,便会在堆栈中分配一个空间并创建一个激活记录,如下所示:


| baz |


| 酒吧


| 保存的PC |


| 一个|


| b |

因此,即使仅声明和未定义,该激活记录如何为a和b分配空间?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM