gpt4 book ai didi

c - 创建线程时如何设置stack_size、stack_addr和guardsize

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:38 26 4
gpt4 key购买 nike

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

使用 pthread_attr_setstack 的一种常见方法是

  1. malloc 一 block 内存
  2. 通过方法设置addrlength

那么,我的问题来了,如果我想使用guard-size来保护我的数据怎么办?假设我需要 A 字节的内存,以及 B 字节的保护大小。

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

最佳答案

实际上 pthread 库本身提供了一个 API 到 set the guard size

int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);

但请注意,如果您正在设置堆栈位置或大小,要么使用像 pthread_attr_setstack(3) 这样的函数。或 pthread_attr_setstackaddr(3) ,那么守卫大小属性将被忽略(即,系统不会创建任何保护区):您有责任处理堆栈溢出(可能通过使用 mprotect(2) 在末尾手动定义一个保护区您已分配的堆栈。

所以,对于您的具体问题,是的,如果您希望使用 pthread_attr_setstack,您需要自行 malloc A+B 字节以包含保护区。否则,如果您接受默认堆栈大小,则可以使用 pthread_attr_setstack 函数。

了解 pthreads这里。另请专门阅读线程堆栈管理 hereStack Management

部分下

关于c - 创建线程时如何设置stack_size、stack_addr和guardsize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10530150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com