Met*_*est 6 c linux layout space memory-address
我想知道64位和32位多线程Linux进程的地址空间布局的完整细节.链接到任何描述它的文章将不胜感激.请注意,我需要了解完整的详细信息,而不仅仅是概述,因为我将直接处理它.所以我需要知道,例如,线程堆栈位于何处,堆,线程私有数据等...
线程堆栈mmap在线程启动时分配(甚至在之前 - 您可以在pthread_attrs中设置堆栈空间).TLS数据存储在线程堆栈的开头.线程堆栈的大小是固定的,通常是2到8 MB.线程处于活动状态时,无法更改每个线程的堆栈大小.(第一个线程 - 运行main - 仍然在地址空间的末尾使用主堆栈,这个堆栈可能会增长和缩小.)堆和代码在所有线程之间共享.互斥体可以在任何data部分 - 它只是一个结构.
线程堆栈的mmap不固定在任何地址:
mem = mmap (NULL, size, prot,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0);
Run Code Online (Sandbox Code Playgroud)
PS现代GCC允许线程堆栈无限制使用SplitStacks功能
| 归档时间: |
|
| 查看次数: |
2017 次 |
| 最近记录: |