【发布时间】:2016-07-24 18:22:11
【问题描述】:
我知道线程共享代码/全局数据但有不同的堆栈。每个线程都有自己的堆栈。我相信每个进程都有一个虚拟地址空间。这意味着每个线程都使用这个单一的虚拟地址空间。
我想知道在虚拟地址空间中有多个线程的情况下堆栈/堆如何增长?如果一个线程的堆栈空间已满,操作系统如何管理?
【问题讨论】:
-
在 Windows 上,每个线程为堆栈获取一块地址空间,默认为 1MB。如果线程溢出这个空间,应用程序就会崩溃。
-
请注意,通常涉及 3 方:操作系统、C 运行时和您自己的代码。操作系统通常不关心您的程序是用 C 编写的,并且 C 运行时通过
malloc/free管理您的堆,或者 C++ 程序使用new/delete。
标签: c linux windows operating-system