在
Linux进程中,每个线程都有自己的堆栈.除此之外,每个线程的本地还有什么.我已经阅读过诸如文件分配表之类的内容……有人可以向我提供一个特定于线程的内容列表以及它们如何在内存中排列.
其次,我注意到当我将一个堆栈分配给一个线程时(参见下面的代码),在我分配的堆栈地址(stackAddr)之后,线程函数中第一个变量的地址在某种程度上是完全字节的.我认为这是因为堆栈的顶部是分配的堆栈内存的结束地址,因为局部变量和分配的堆栈的地址值的差异大约是堆栈的大小(STACKSIZE).换句话说,它看起来像是从底部向顶部发展.
pthread_attr_init( &attr[tid] ); stackAddr = malloc(STACKSIZE); pthread_attr_setstack( &attr,stackAddr,STACKSIZE );
解决方法
对于我能想到的第一个问题:
>线程ID
>堆栈
>机器寄存器
>特定于线程的变量(由pthread_setspecific和__thread存储类设置的键/值对)
> signal mask
>待定信号集
>错误的价值
第二,是的,你是对的,在x86上,堆栈增长到更低的地址.因此,如果您正在使用pthread_attr_setstack,则该区域将从最后开始使用.