【发布时间】:2014-03-29 14:52:05
【问题描述】:
操作系统如何确定在底层进程的地址空间中将给每个线程多少堆栈空间?
如果一个线程使用了最初分配给它的所有堆栈空间,并且同一进程的其他线程存在大量未充分利用的空间,该怎么办? 我知道,堆栈和堆的同类问题可以通过它们向相反方向增长来解决。
操作系统是否在内存中的其他地方为线程分配了更多空间,还是会导致堆栈溢出?
【问题讨论】:
-
当线程耗尽其堆栈时会发生什么?答案在您的问题之上。
-
但是如果进程的地址空间中有很多其他线程未充分利用的空间,是否仍然会导致堆栈溢出?
-
是的。每个线程的堆栈都是独立的,并且独立于其他线程堆栈。将它们混合在一起通常是一个非常糟糕的主意。
-
在虚拟内存的情况下,这是一个很难回答的问题。线程堆栈通常是可交换的。这取决于你所说的“分配给它”是什么意思。
-
通常你有虚拟内存和物理内存。创建线程时会为堆栈分配一块虚拟内存。物理内存按需分配给该虚拟内存。一旦分配了物理内存,就可以将其换出。如果虚拟地址空间有空间,一些系统可以在需要时自动增加堆栈。
标签: multithreading memory memory-management concurrency operating-system