gpt4 book ai didi

c - 为什么 pthread 不使用给定的堆栈空间?

转载 作者:行者123 更新时间:2023-12-04 05:46:11 26 4
gpt4 key购买 nike

创建新时pthread并向它传递一个用 pthread_attr_getstack 修改的参数它似乎没有使用定义的堆栈空间。

void* thread_function(void * ptr)
{
int a;
printf("stack var in thread %p\n",&a);
}


int main( int argc , char **argv )
{
pthread_t thread;
void * ptr = NULL;
const int stack_size = 10*1024;

void * stack = malloc(stack_size);
printf("alloc=%p\n",&stack);

pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setstack( &attr , stack , stack_size );

if (pthread_create(&thread, &attr, &thread_function , ptr ) ) {
printf("failed to create thread\n");
return 1;
}

pthread_attr_destroy(&attr);
pthread_exit( 0 );
return 0;
}

不幸的是,输出是:
alloc=0x7fff48989bc8
stack var in thread 0x7f6e6f0d2ebc

即使堆栈向后增长(我不确定)指针值差异很大,也只希望创建的线程使用不同的虚拟内存地址空间。但我认为情况并非如此。

最佳答案

你打印错了,

printf("alloc=%p\n",&stack);

打印本地堆栈变量的地址,而不是分配的内存。你必须要做
printf("alloc=%p\n",stack);

此外,您需要检查错误:

ERRORS

   pthread_attr_setstack() can fail with the following error:

EINVAL stacksize is less than PTHREAD_STACK_MIN (16384) bytes. On some
systems, this error may also occur if stackaddr or
stackaddr + stacksize is not suitably aligned.


您只设置了 10kB 的堆栈,因此请使用更大的堆栈重试,并检查 pthread_attr_setstack 的返回值。

我可能也会尝试使堆栈页面对齐。

关于c - 为什么 pthread 不使用给定的堆栈空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10652226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com