这些天我正在阅读APUE,并且发现了一个问题。
使用pthread_attr_setstack
的一种常用方法是
malloc
记忆addr
和length
醇>
然后,我的问题就出现了,如果我想使用guard-size来保护我的数据呢?假设我需要A
个字节的内存,B
个字节用于guard-size。
我应该malloc
A+B
个字节,还是malloc
A
个字节?
答案 0 :(得分:0)
实际上,pthread库本身为set the guard size
提供了一个APIint pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);
但请注意,如果您使用pthread_attr_setstack(3)
或pthread_attr_setstackaddr(3)
之类的函数设置堆栈位置或大小,则会忽略保护区域属性(即,没有保护区域是由系统创建):您有责任处理堆栈溢出(可能通过使用mprotect(2)
在您已分配的堆栈末尾手动定义保护区域。
因此,针对您的具体问题,是的,如果您希望使用A+B
,则需要malloc pthread_attr_setstack
个字节来自己包含警戒区域。另外,如果你对默认的堆栈大小没问题,那么你可以使用pthread_attr_setstack
函数。
在此处阅读pthreads
。另请参阅Stack Management