Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Operating system 过程部分的空白部分是什么?[操作系统]_Operating System - Fatal编程技术网

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行时,
堆栈
的大小将减小