日期:2014-05-16  浏览次数:21388 次

用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