我正在尝试监视我的线程的堆栈使用情况。为此,我需要知道线程堆栈的地址,而我发现这样做的唯一方法是使用pthread_attr_setstack()
.
我目前正在使用 mmap 来分配内存:
pthread_attr_t ptAttr;
pthread_t pth;
pthread_attr_init(&ptAttr);
void *stack = mmap(NULL, stksize, PROT_WRITE|PROT_READ, MAP_ANONYMOUS|MAP_SHARED, -1, 0);
pthread_attr_setstack(&ptAttr, stack, stksize);
pthread_create(&pth,&ptAttr,threadFunc,&info);
所以第一个问题,这是分配内存的好方法mmap
吗?标志是否正确?我应该malloc
改用吗?这将在没有虚拟/交换内存的低资源设备上运行。
第二个问题,这个内存会在线程死掉的时候自动释放吗?如果您不确定,有没有办法查明它是否已发布?