【发布时间】:2014-05-03 20:05:34
【问题描述】:
如何为 Linux 或任何其他操作系统中的进程的每个线程分配堆栈空间(在同一地址空间中)?
【问题讨论】:
标签: linux multithreading memory-management process operating-system
如何为 Linux 或任何其他操作系统中的进程的每个线程分配堆栈空间(在同一地址空间中)?
【问题讨论】:
标签: linux multithreading memory-management process operating-system
这取决于线程库的类型,像 pthreads 这样的用户空间库会分配内存并将其划分为线程堆栈。在操作系统端,每个线程都会获得一个内核堆栈。
【讨论】:
在创建新线程时,操作系统会在堆栈段中为当前线程(父线程)保留空间,未来的自动变量和父线程的函数调用数据将存放在其中。然后,它分配一个保护页(这是为了防止父堆栈碰撞到子堆栈,但这可能因不同的操作系统而异)。完成此操作后,将创建子线程的堆栈框架(通常为一两页)。
如果父级产生多个线程,则会重复此过程。所有这些堆栈帧都存在于所有这些线程所属的进程地址空间的堆栈段中。
【讨论】: