我们知道每个线程都有自己的堆栈。这些堆栈在哪里分配?我读了一些文档,看起来堆栈是在创建线程时从堆中分配的。这有意义吗?提前谢谢!
答案 0 :(得分:4)
C没有指定内存的来源。它依赖于OS和C运行时库。线程堆栈内存由操作系统分配,作为创建线程的系统调用的一部分,或者创建线程的进程必须提供来自应用程序堆的内存以用作线程堆栈。
查看Linux clone系统调用的文档,看来Linux执行后者;线程堆栈内存来自应用程序堆。
为什么问?
答案 1 :(得分:2)
某些系统内置了对线程的支持。其他人没有。非支持系统的线程库将从堆中分配堆栈空间,并使用定时器实现线程切换。
内置支持线程的系统通常会通过将新页面放入地址空间来创建堆栈。理想情况下,它会在堆栈的每一端放置一个保护页面来检测溢出或运行。