这些天我正在阅读APUE,刚刚发现了一个问题。
一种常见的使用方法pthread_attr_setstack
是
malloc
一段记忆- 通过方法设置
addr
andlength
然后,我的问题来了,如果我想使用保护大小来保护我的数据怎么办?假设我需要A
内存B
字节和保护大小的字节。
我应该malloc
A+B
字节,还是malloc
A
字节?
实际上 pthread 库本身提供了一个 API 来设置保护大小
int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);
但请注意,如果您正在设置堆栈位置或大小,无论是使用函数 pthread_attr_setstack(3)
还是pthread_attr_setstackaddr(3)
,您都将忽略保护大小属性(即,系统不会创建保护区域):您有责任处理堆栈溢出(也许通过mprotect(2)
在您分配的堆栈末尾手动定义保护区。
因此,针对您的具体问题,是A+B
的,如果您希望使用pthread_attr_setstack
. 否则,如果您对默认堆栈大小没问题,则使用该pthread_attr_setstack
函数。