C语言没有规定内存来自哪里,这取决于操作系统和C运行时库。线程堆栈内存是由操作系统作为创建线程的系统调用的一部分分配的,或者创建线程的进程必须提供应用程序堆中的内存作为线程堆栈使用。查看Linux clone系统调用的文档,似乎Linux采用后者,即线程堆栈内存来自应用程序堆。您为什么要问?
有些系统内置线程支持,而其他系统则没有。对于不支持线程的系统,线程库将从堆中分配堆栈空间,并使用计时器实现线程切换。 拥有内置线程支持的系统通常会通过在地址空间中创建新页面来创建堆栈。理想情况下,它会在堆栈的每一端放置守卫页以检测溢出或欠流。