标签: signals virtual-memory system-calls mmap reentrancy
虽然mmap()需要一个系统调用并且它只能分配整个页面,但它可以用作解决方法来使用信号处理程序的动态内存分配(malloc())。
mmap()
malloc()
malloc()不可重入,这会导致在控件处于malloc()(或free()或realloc())时信号即将到来,并且它的处理程序试图使用这些函数,该过程可能会崩溃。
free()
realloc()
但是libc的mmap()只是同名内核api调用的包装器,因此它可能被认为是可重入的。当然,分配的内存页面应该稍后取消映射。
这可行吗?