1

这些天我正在阅读APUE,刚刚发现了一个问题。

一种常见的使用方法pthread_attr_setstack

  1. malloc一段记忆
  2. 通过方法设置addrandlength

然后,我的问题来了,如果我想使用保护大小来保护我的数据怎么办?假设我需要A内存B字节和保护大小的字节。

我应该malloc A+B字节,还是malloc A字节?

4

1 回答 1

0

实际上 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函数。

在这里阅读pthreads。还可以在该部分下专门阅读有关线程堆栈管理的信息Stack Management

于 2012-05-10T11:41:25.363 回答