2011-03-24 77 views
1

我想增加通过pthread_create()创建的线程的堆栈大小。要走的路似乎是在pthreads中指定线程堆栈大小

int pthread_attr_setstack(pthread_attr_t *attr, 
          void *stackaddr, 
          size_t stacksize); 

pthread.h

然而,根据多个在线references

的stackaddr应适当对准,以被用作一个堆栈;例如,pthread_attr_setstack()可能会失败,[EINVAL]如果(stackaddr &为0x7)不为0

我的问题:可能有人提供的如何执行对齐的示例? (对齐)平台还是实施依赖性?

在此先感谢

回答

11

决不使用pthread_attr_setstack。它有很多致命的缺陷,其中最糟糕的是它不可能在使用它创建线程后释放或重用堆栈。 (POSIX明确规定,如果这样做会导致未定义的行为)。

POSIX提供了一个更好的功能,pthread_attr_setstacksize允许您请求所需的堆栈大小,但留下实施负责分配和释放堆栈。

+0

感谢您的绝对答案:) – abeln 2011-03-24 16:37:58

+0

没问题。 :-)我没有提到的另一个缺点是没有可移植的方法来设置'pthread_attr_setstack'的保护页面,所以堆栈溢出会导致内存损坏,并可能导致危险后果,而不仅仅是'SIGSEGV'。 – 2011-03-24 16:50:36

1

查找到posix_memalign()

它将分配一个请求对齐和大小的内存块。