只有两个简单的问题我找不到合适的答案。我决定学习汇编语言,因为它是我的编程能力缺乏的一个领域。
另外,在递归调用函数的情况下,操作系统如何确定线程的堆栈应该有多大?或者它只是将堆栈放在堆栈的位置,在堆栈与堆发生冲突之前,堆栈可以扩展到大量内存中?
发布于 2016-06-10 10:04:19
是堆的分页文件部分吗?
不怎么有意思。您不能直接访问它;操作系统可能会透明地使用它来调出进程的虚拟地址空间的一部分。
堆不一定是一个连续的内存块?
是的,使用mmap(MAP_ANONYMOUS)的分配被认为是堆的一部分,可以在虚拟地址空间中的任何位置。正如Weather Vane所指出的,“堆”是一个相当宽泛/古老的术语。对于理解幕后到底发生了什么,这不是一个有用的概念。
例如,你可以mmap一个文件,使其内容成为你的虚拟地址空间的一部分。这是“堆”的一部分吗?我不知道,也不在乎。
还在函数被递归调用的情况下,操作系统如何确定线程的堆栈应该有多大?
它只是在进程启动时设置最大堆栈大小限制。使用递归函数与此无关。(尽管这是最常见的用完固定大小限制的方法,另一种方法是大型局部数组)。
https://stackoverflow.com/questions/37730696
复制相似问题