【发布时间】:2015-02-12 13:53:54
【问题描述】:
这个问题可能听起来微不足道,但我知道每当一个函数开始执行时,都会在堆栈中为函数的所有局部变量等创建一个堆栈帧,但我不明白当 for 循环开始执行或if 条件中的代码开始执行。将它们视为在函数的堆栈框架内执行似乎是不合理的,因为它们有自己的范围,因此也有自己的局部变量。但是,它们可以访问它们上面的函数的变量,因此这似乎暗示它们在函数的堆栈框架内。
那么有人可以帮我解决这个问题吗?
它们在执行时实际位于内存中的什么位置?
同样的问题出现在结构上,它们有自己的作用域,它们不是指针,而只是更大的“盒子”,包含整数、char*s 等。
【问题讨论】:
-
可以合理地认为它们是使用函数的堆栈帧执行的。语句块内可能有额外的变量;实际上,它们是在块的每个条目上分配(并在必要时进行初始化)的。但是如果你在一个循环中有 3 个连续的块,并且每个块都定义了一些变量,那么块 1 中使用的空间很可能会被块 2 和块 3 中的变量重用。
标签: c loops memory struct conditional-statements