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