dom*_*lao 12 c heap memory-management mmap
只是问题陈述,我如何使用mmap()在堆中分配内存?这是我唯一的选择,因为malloc()它不是可重入的函数.
R..*_*R.. 23
你为什么需要重入?唯一需要的是从信号处理程序调用函数; 否则,线程安全性也一样好.这两个malloc和mmap是线程安全的.每个POSIX都不是异步信号安全的.实际上,mmap从信号处理程序可能工作正常,但从信号处理程序分配内存的整个想法是一个非常糟糕的主意.
如果你想用来mmap分配匿名内存,你可以使用(不是100%便携但绝对是最好的):
p = mmap(0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
Run Code Online (Sandbox Code Playgroud)
便携但丑陋的版本是:
int fd = open("/dev/zero", O_RDWR);
p = mmap(0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
close(fd);
Run Code Online (Sandbox Code Playgroud)
请注意MAP_FAILED,不是NULL,失败的代码.