我需要分配内存,但是不能使用malloc
,因为它不是可重入的,所以我将使用POSIX mmap
函数实现动态内存分配。是否可以使用mmap
?
是的,mmap()应该是可重入的,因此您应该能够使用它。请注意,mmap()通常是一项相当缓慢的操作,因此您最好仅在真正需要的(希望很少且稀少)情况下使用它,而不是作为通用目的的malloc()替代。
POSIX 2008包含一份异步信号安全函数列表,这些函数可以从信号处理函数中安全调用(请参见链接中第2.4.2节中的表格)。mmap()不在该列表中,也就是说,从信号处理函数中调用mmap()可能会导致未定义的行为。
您可以避免在信号处理程序中分配内存,只需设置一些标志,并稍后执行实际工作即可。
编辑:将可重入替换为线程安全
在大多数操作系统上,malloc是线程安全的。
您使用的是哪个操作系统?您确定它不是线程安全的吗? 或者您需要它是可重入的(我猜不需要)?
malloc
。malloc
没有回调机制来调用您的代码,因此无论如何都无法重新进入它(在同一线程上)。任何可重入性都完全在标准库内部并受其控制。 - MSalters