文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>多线程中栈空间的分配

多线程中栈空间的分配

时间:2010-06-29  来源:星巴

有一个问题,在LinuxThread线程模型的实现中,管理线程的栈与其它线程的栈之间是什么关系?   在回答这些问题前,让我们先看一下Linux的内存空间模型:       从上图可提取以下三点信息:
  1. 进程栈空间从0xC0000000往下进行分配
  2. 运行时堆通过malloc进行分配,位置处于.bss与0x40000000之间
  3. 在Glibc的malloc中,对于小于128k的需求,直接从堆中分配,而大于128k的需求则通过mmap从文件映射区之后分配,因此地址会大于0x40000000.

因此,对于以LinuxThread实现的多线程而言,要区分以下两种情况:

  1. 管理线程,管理线程的堆栈与普通进程无异,即以上提到的三点
  2. 普通线程,因为管理线程会在进程堆中申请一块空间(THREAD_MANAGER_STACK_SIZE=8M?)当作自已的运行栈,而我们知道,大于128k的malloc会采用mmap方式从文件映射区之后分配,所以,普通线程的栈地址就在这个空间内,即大于0x40000000

对于NPTL,因其不使用管理线程,因此,该进程中所有的线程都在小于0xC0000000的栈区,只不过,每个线程在这个大栈区使用不同的小块而已.

相关阅读 更多 +
排行榜 更多 +
火柴人勇士3

火柴人勇士3

休闲益智 下载
射击之王

射击之王

飞行射击 下载
危险战争

危险战争

飞行射击 下载