堆栈旁边的线程有什么用处

Met*_*est 7 c linux 64-bit x86 stack

在Linux进程中,每个线程都有自己的堆栈.除此之外,每个线程的本地还有什么.我已经阅读过诸如文件分配表之类的内容......有人可以向我提供一个特定于线程的内容列表以及它们如何在内存中排列.

其次,我注意到当我将一个堆栈分配给一个线程时(参见下面的代码),线程函数中第一个变量的地址在我分配的堆栈地址(stackAddr)之后的某种程度上是完全字节的.我认为这是因为堆栈的顶部是分配的堆栈内存的结束地址,因为局部变量和分配的堆栈的地址值的差异大约是堆栈的大小(STACKSIZE).换句话说,它看起来像从底部向顶部发展.

pthread_attr_init( &attr[tid] );
stackAddr = malloc(STACKSIZE);
pthread_attr_setstack( &attr, stackAddr, STACKSIZE );
Run Code Online (Sandbox Code Playgroud)

chi*_*ill 6

对于我能想到的第一个问题:

  • 线程ID
  • 机器寄存器
  • 线程特定变量(两个键/值通过设定对pthread_setspecific__thread存储类)
  • 信号掩码
  • 待定信号集
  • 错误的价值

第二,是的,你是对的,在x86上,堆栈增长到更低的地址.因此,如果您正在使用pthread_attr_setstack该区域将从头开始使用.


R..*_*R.. 5

POSIX XBD 3.396

流程中的单一流程控制.每个线程都有自己的线程ID,调度优先级和策略,errno值,特定于线程的键/值绑定,以及支持控制流所需的系统资源.地址可由线程确定的任何内容,包括但不限于静态变量,通过malloc()获得的存储,通过实现定义的函数获得的直接可寻址存储,以及自动变量,可由同一进程中的所有线程访问.