【发布时间】:2017-10-15 08:04:12
【问题描述】:
我正在关注Memory Layout And The Stack 以了解堆栈帧..
作者很好地解释了堆栈帧,并说明了在给定时间点堆栈中的内容
他还在下面问了一些问题
- 假设一个程序进行了 5 次函数调用。堆栈上应该有多少帧?
- 我们看到堆栈线性向下增长,当函数返回时,堆栈上的最后一帧被释放并返回到未使用的内存中。是否有可能将堆栈中间某处的帧返回到未使用的内存?如果是这样,这对正在运行的程序意味着什么?
- goto() 语句能否导致堆栈中间的帧被释放?答案是否定的,但为什么呢?
- longjmp() 能否导致堆栈中间的帧被释放?
以下是我对以上问题的回答
- 假设一个程序进行了 5 次函数调用。堆栈上应该有多少帧?
如果函数相互独立,则只有主函数或主函数和调用函数在堆栈中
我们看到堆栈线性向下增长,当函数返回时,堆栈上的最后一帧被释放并返回到未使用的内存中。是否有可能将堆栈中间某处的帧返回到未使用的内存?如果是这样,这对正在运行的程序意味着什么?
我认为这是不可能的,因为这可能会破坏内存
我不确定其余的问题。请您帮忙解决这个问题
如果您需要更多信息,请告诉我
【问题讨论】:
-
是否有可能将堆栈中间某处的帧返回到未使用的内存中?:不,它是stack。
标签: c function memory operating-system stack