使用mmap分配内存

时间:2011-01-20 10:59:36

标签: c posix mmap

我需要分配内存但我不能使用malloc因为它不可重入,所以基本上我将使用POSIX mmap函数实现动态内存分配。是否可以使用mmap

2 个答案:

答案 0 :(得分:5)

是的,mmap()应该是可重入的,所以你应该可以使用它。请注意,mmap()通常是一个非常慢的操作,因此您可能更好地仅在那些(希望)实际需要的情况下使用它,而不是作为通用的malloc()替换。

POSIX 2008包含一个异步信号安全函数列表,可以安全地从信号处理函数调用(参见链接中2.4.2节中的表)。 mmap()不在该列表中,也就是说,从信号处理函数调用mmap()可能会导致未定义的行为。

你可以做的是避免在信号处理程序中分配内存,只需设置一些标志并稍后进行实际工作。

答案 1 :(得分:1)

编辑:用线程安全替换重入

malloc在大多数操作系统上都是线程安全的。

您正在使用哪一个,并且您确定它不是线程安全的吗? 或者你需要它是可重入的(我猜不是)?