谁来确定堆栈大小?

时间:2018-09-25 19:06:30

标签: process stack programming-languages

我目前正在阅读 C ++ Primer Plus 。在第9章内存模型和命名空间的标题为自动变量和堆栈的部分中,作者讨论了程序如何通过 stack 管理自动变量。以及编译器如何更改默认堆栈大小。

该段带来很多混乱。我一直以为OS负责为正在运行的程序创建和管理过程映像,其中包括 stack heap

挠头后,我有以下结论(不确定是否正确)和其他问题:

  1. 操作系统确实创建了一个包括 stack 和其他内容的过程映像。但是编译器可以通过某种方式向OS发出指令,指示栈的 默认 大小。问题是:传递此类信息的机制是什么? default 是堆栈的默认 starting 大小还是默认的 maximum 大小?堆栈在运行期间是否可以调整大小?

这是否还意味着在同一系统上运行的不同程序可以具有不同的堆栈大小?

  1. 实际上是谁堆叠和弹出?堆叠和弹出自动变量时是否涉及OS(内核代码)?我倾向于认为是的,并且代码可能来自链接到的代码/库,或者来自编译期间的代码。

原因是我认为进程是操作系统维护的结构,用户代码可能没有权限对其进行修改。忙碌,我们从不明确地编写这些例程。

但这只是纯粹的猜测。

我真的很感谢这个令人困惑的概念的帮助。

谢谢

0 个答案:

没有答案