gpt4 book ai didi

c++ - 编译器如何存储自动变量

转载 作者:行者123 更新时间:2023-11-30 19:08:24 30 4
gpt4 key购买 nike

我仍然不太明白编译器如何在运行前存储自动(局部)变量的概念。

我可以理解编译器将静态变量放在data或bss段中。另一方面,自动变量被放置在堆栈上,但直到运行时调用函数时才放置在堆栈上。那么在程序执行之前它们存储在哪里呢?

我的猜测是编译器只需要知道局部变量的大小(作为占位符),但是我们可以在目标文件中看到这些信息吗?

最佳答案

在函数外部声明的变量可以是全局/命名空间范围的变量,也可以是类成员。自动变量是在函数内声明的变量。自动变量只有在运行时在函数执行中遇到时才存在。

因此,在执行可执行文件之前,它们不会存储在任何地方。

对于典型的编译器,当编译函数时,编译器遇到局部变量声明时,它会发出指令来保留足以满足该变量的大小和对齐方式的堆栈空间量。这通常是通过将特定寄存器增加静态量来完成的。然后,编译器发出代码来初始化该存储中的对象。

当该变量超出范围时,在调用适当的析构函数后,编译器会发出指令来递减堆栈寄存器。这样,以后的代码就可以为其他局部变量重用该堆栈空间。

关于c++ - 编译器如何存储自动变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45259584/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com