使用mmap分配内存

dom*_*lao 5 c posix mmap

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

jan*_*neb 5

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

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

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


Ben*_*ery 1

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

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

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

  • 在当今的大多数系统上,malloc 是线程安全的,但不可重入。 (6认同)
  • @sasayins 为什么你需要一个可重入的 malloc ?如果您只需要在多个线程中分配内存,那就没问题。malloc 是线程安全的。如果您需要在信号处理程序中分配内存,则不能这样做。如果您还需要其他东西,请解释一下。 (3认同)