c++ - 局部变量在编译时存储在哪里?

标签 c++ c function compilation

也许我遗漏了一些明显的东西,但在运行时,局部变量不是在调用包含变量的函数时被放置在堆栈上的吗。

因此,当编译器单步执行我们的源代码时,它会将函数的操作放在 .text 段中,但是变量在编译时放置在哪里,以便它们可以在运行时放置到堆栈上?谢谢

最佳答案

局部变量不会在编译时放在任何地方。

编译器生成的代码在运行时执行时会在堆栈上分配空间(通常;其他方案也是可能的)。编译器记录有关每个变量的信息(名称、类型、大小、相对于堆栈指针的偏移量等),并使用该信息生成创建、访问和最终释放变量的代码。

技术题外话:C 没有“本地”和“全局”变量,或者至少语言标准不使用这些术语。一个对象有一个生命周期(存储持续时间),即它存在时执行的时间跨度。或多或少与此无关的是,对象的名称有一个作用域,即名称可见的程序文本区域。在函数内声明的变量具有 block 作用域。默认情况下,它具有自动存储持续时间(意味着它仅在包含 block 执行时存在),但如果使用 static 定义它,则它具有静态存储持续时间关键字 如果它是在任何函数之外定义的。一个“本地”static变量将以与“全局”变量相同的方式存储,这与“本地”自动变量的存储方式不同。

关于c++ - 局部变量在编译时存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36779395/

相关文章:

c++ - mingw32/bin/ld.exe…对[class]的 undefined reference …collect2.exe:错误:ld返回1退出状态

c++ - 我可以命名 ostream << 运算符吗?

c - 如何计算成功结束的子进程?

python - 如何使用 Pygame 矩形

c - 请求成员 .. 不是结构

javascript - 访问不在作用域内的函数

c++ - 如何在现代 C++ 中将列附加到二维 vector

c++ - 警告 C4247 和 C4248 是什么意思?为什么它们从 Visual C++ 2005 中删除?

c - 数组和点问题

c++ - fstat 的任何替代方法?