【发布时间】:2020-09-26 15:58:04
【问题描述】:
就我understand 而言,操作系统经常参与管理堆及其簿记。例如,用户程序的进程需要调用系统调用才能从堆中分配和释放内存。
这对 堆栈 有何作用?据我所知:
- CPU 处理器提供推送和弹出指令以从堆栈中添加/删除项目。这给了我一种(可能是错误的)印象,即用户程序可以直接编译为汇编代码以执行不涉及操作系统的堆栈推送/弹出 CPU 指令
- 操作系统监督堆栈内存,至少限制其大小,所以我理解它必须知道并在用户程序尝试使用堆栈时参与其中(例如,推送和弹出调用堆栈帧等)。
我上面的理解正确吗?
更广泛地说,操作系统是否以任何方式参与了涉及堆栈的运行时操作? (例如弹出和推送新的堆栈帧、它们的组织等),如果是这样,怎么做?
还是操作系统只参与提前分配整个任务/线程/进程的栈内存?
【问题讨论】:
-
为什么用java、c++或c标记?如果它们之间存在差异,您是否感兴趣?
-
这能回答你的问题吗? “操作系统在创建线程时为每个系统级线程分配堆栈。通常语言运行时调用操作系统为应用程序分配堆。”
-
@TedKleinBergman 谢谢 - 当程序弹出或推送数据到堆栈时,操作系统不会以任何方式参与吗?
-
如果操作系统必须在每次推送或弹出出现时进行干预,它会降低性能。为什么你会有操作系统负责堆栈的印象?
-
了解分页和内存管理。
标签: memory-management linux-kernel operating-system stack