我想增加通过pthread_create()创建的线程的堆栈大小。要走的路似乎是
int pthread_attr_setstack( pthread_attr_t *attr,
void *stackaddr,
size_t stacksize );
来自pthread.h
。
但是,根据多个在线references,
stackaddr应适当对齐以用作堆栈;例如,如果(stackaddr& 0x7)不为0,pthread_attr_setstack()可能会因[EINVAL]而失败。
我的问题:有人可以举例说明如何进行对齐吗?是(对齐)平台还是依赖于实现?
提前致谢
答案 0 :(得分:12)
从不使用pthread_attr_setstack
。它有很多致命的缺陷,其中最糟糕的是,在使用它创建一个线程之后,永远不会自由或重用堆栈。 (POSIX明确指出任何尝试都会导致未定义的行为。)
POSIX提供了一个更好的函数pthread_attr_setstacksize
,它允许您请求所需的堆栈大小,但让实现负责分配和释放堆栈。
答案 1 :(得分:1)
查看posix_memalign()
。
它将分配所请求的对齐和大小的内存块。