gpt4 book ai didi

c - 如何使用 mmap 在堆中分配内存?

转载 作者:太空狗 更新时间:2023-10-29 16:39:37 24 4
gpt4 key购买 nike

刚才提到的问题,我如何使用mmap() 在堆中分配内存?这是我唯一的选择,因为 malloc() 不是可重入函数。

最佳答案

为什么需要重入?唯一需要的时候是从信号处理程序调用函数;否则,线程安全性同样好。 mallocmmap 都是线程安全的。根据 POSIX,异步信号也不是安全的。在实践中,mmap 可能在信号处理程序中运行良好,但从信号处理程序分配内存的整个想法是一个非常糟糕的想法。

如果你想使用mmap分配匿名内存,你可以使用(不是100%可移植但绝对是最好的):

p = mmap(0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);

便携但丑陋的版本是:

int fd = open("/dev/zero", O_RDWR);
p = mmap(0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
close(fd);

请注意,MAP_FAILED,而不是NULL,是失败的代码。

关于c - 如何使用 mmap 在堆中分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4779188/

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