我需要分配内存,但我不能使用malloc因为它不可重入,所以基本上我将使用POSIX mmap函数实现动态内存分配.可以使用mmap吗?
是的,mmap()应该是可重入的,所以你应该可以使用它.请注意,mmap()通常是一个非常慢的操作,因此您可能更好地仅在那些(希望)很少和非常需要的情况下使用它,而不是作为通用的malloc()替换.
POSIX 2008包含一个异步信号安全函数列表,可以安全地从信号处理函数调用(参见链接中2.4.2节中的表).mmap()不在该列表中,即从信号处理函数调用mmap()可能导致未定义的行为.
你可以做的是避免在信号处理程序中分配内存,只需设置一些标志并稍后进行实际工作.
编辑:用线程安全替换可重入
malloc 在大多数操作系统上都是线程安全的。
您使用的是哪一个并且您确定它不是线程安全的?或者你需要它是可重入的(我想不需要)?