用pthread_attr_getstack()函数获取线程的栈大小 和起始地址为什么都是0
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<sys pes.h>
#include<pthread.h>
#include<errno.h>
void *thread(void *arg)
{
printf("thread run\n");
return ((void *)0);
}
int main(void)
{
pthread_t tid;
pthread_attr_t attr;
pthread_attr_init(&attr);
void *stack;
size_t stacksize;
pthread_create(&tid,&attr,thread,NULL);
pthread_attr_getstack(&attr,&stack, &stacksize);
printf("%x stacksize:%u",stack,stacksize);
sleep(2);
return 0;
}
这是想获取线程栈的起始地址和默认栈大小的程序,为什么程序运行后得出的结果 默认的都是零;
下面是我设置线程的栈的最低地址,和栈大小以后的一个程序,运行后得出的结构还是零 不知道什么原因,请高手指点 谢谢了
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<pthread.h>
#include<errno.h>
pthread_attr_t attr;
void *thread(void *arg)
{
printf("thread run\n");
return ((void *)0);
}
int main(void)
{
pthread_t tid;
void *stack;
size_t stacksize;
pthread_attr_init(&attr);
stack=malloc(1024);
pthread_attr_setstack(&attr,stack,1024);
pthread_create(&tid,&attr,thread,NULL);
pthread_attr_getstack(&attr,&stack, &stacksize);
printf("%x stacksize:%u\n",stack,stacksize);
sleep(2);
return 0;
}
------解决方案--------------------
估计 默认的零 只是相对地址,或者说是偏移量,在程序实际执行时会自动加上绝对地址起始位置的
------解决方案--------------------
用这两个宏看看你的系统是不是支持线程栈属性
_POSIX_THREAD_ATTR_STACKADDR
_POSIX_THREAD_ATTR_STACKSIZE