Я пытаюсь отслеживать использование стека моих потоков. Для этого мне нужно знать адрес стека потоков, и единственный найденный мной способ сделать это — установить стек с помощью 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
вместо этого? Это будет работать на устройстве с низким уровнем ресурсов без виртуальной памяти / памяти подкачки.
Второй вопрос, будет ли эта память освобождаться автоматически, когда поток умирает? Если вы не уверены, есть ли способ узнать, был ли он выпущен?