Operating system 过程部分的空白部分是什么?[操作系统]
Operating system 过程部分的空白部分是什么?[操作系统],operating-system,Operating System,我想知道空白部分是什么意思,箭头是什么意思。如果有人能帮忙的话。非常感谢。该区域通常由堆栈部分使用,因为堆栈可以根据当前调用堆栈的深度增长/收缩。正如您的链接所述 进程堆栈包含临时数据,如方法/函数 参数、返回地址和局部变量 调用堆栈的深度是如何增长的? 要真正理解这一点,您必须了解assembler如何处理函数调用。但我将尝试提供一个简单的解释。因此,当您的代码调用一个函数时,它的相关数据会被推送到堆栈中,而堆栈会向下增长,当函数的执行完成时,不再需要它的本地数据,因此堆栈会缩回。 但是当代码
我想知道空白部分是什么意思,箭头是什么意思。如果有人能帮忙的话。非常感谢。该区域通常由
堆栈
部分使用,因为堆栈
可以根据当前调用堆栈的深度增长/收缩。正如您的链接所述
进程堆栈包含临时数据,如方法/函数
参数、返回地址和局部变量
调用堆栈的深度是如何增长的?
要真正理解这一点,您必须了解assembler
如何处理函数调用。但我将尝试提供一个简单的解释。因此,当您的代码调用一个函数时,它的相关数据会被推送到堆栈中,而堆栈会向下增长,当函数的执行完成时,不再需要它的本地数据,因此堆栈会缩回。
但是当代码包含嵌套的函数
调用时,即函数A
调用函数B
和函数B
调用函数C
。在这种情况下,堆栈不断增长
如果您的代码包含太多嵌套的函数
调用
,则进程堆栈可能会扩展,这样就不会有更多的空白区域。当这种情况发生时(可能是当您在没有正确的基本大小写的情况下实现一个递归函数
时),我们得到了我们所爱的
以下部分提供了此过程的直观解释
假设您正在运行一个程序,在伪代码中,它看起来如下所示
fun first(arguments){
second();
}
fun second(arguments){
third();
}
fun third(arguments){
print("hello");
}
fun main(){
first(arguments); // line 1
third(arguments); // line 2
}
当程序启动时,它的内存块将如下所示
由于程序启动时调用main方法
,因此堆栈
将保存与主函数关联的所有本地变量
当main函数调用第一个函数时,堆栈将向下增长,因为本地变量
和与第一个函数
相关的其他内容将被推到堆栈
。因此,它如下所示
由于第一个函数
在内部调用第二个
和第二个函数
在内部调用第三个
,堆栈将扩展以容纳与第二个
和第三个
函数相关的所有数据
请注意,堆栈只会在嵌套的函数
调用中增长。例如,当主函数
中的第一行已执行且执行
移动到第2行时,堆栈
的大小将减小