也许我遗漏了一些明显的东西,但在运行时,局部变量不是在调用包含变量的函数时被放置在堆栈上的吗。
因此,当编译器单步执行我们的源代码时,它会将函数的操作放在 .text 段中,但是变量在编译时放置在哪里,以便它们可以在运行时放置到堆栈上?谢谢
最佳答案
局部变量不会在编译时放在任何地方。
编译器生成的代码在运行时执行时会在堆栈上分配空间(通常;其他方案也是可能的)。编译器记录有关每个变量的信息(名称、类型、大小、相对于堆栈指针的偏移量等),并使用该信息生成创建、访问和最终释放变量的代码。
技术题外话:C 没有“本地”和“全局”变量,或者至少语言标准不使用这些术语。一个对象有一个生命周期(存储持续时间),即它存在时执行的时间跨度。或多或少与此无关的是,对象的名称有一个作用域,即名称可见的程序文本区域。在函数内声明的变量具有 block 作用域。默认情况下,它具有自动存储持续时间(意味着它仅在包含 block 执行时存在),但如果使用 static
定义它,则它具有静态存储持续时间关键字 或 如果它是在任何函数之外定义的。一个“本地”static
变量将以与“全局”变量相同的方式存储,这与“本地”自动变量的存储方式不同。
关于c++ - 局部变量在编译时存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36779395/