2011-01-20 68 views
5

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

+0

“可重入”通常被理解为包括所有叶函数,如`malloc`。 `malloc`没有对你的代码的回调机制,所以无论如何你都无法重新输入它(在同一个线程中)。任何重入将完全在标准libray本身的控制之下。 – MSalters 2011-01-20 12:10:47

+0

@ MSalters:大概他想要在信号处理程序中分配内存,在这种情况下malloc()不可重入是一个问题。 – janneb 2011-01-20 12:21:58

+0

@janneb:不是不允许吗? – MSalters 2011-01-20 21:20:55

回答

1

编辑:更换折返由线程安全

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

你在使用哪一个,你确定它不是线程安全的? 还是你需要它是可重入的(我猜不是)?

5

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

POSIX 2008包含可从信号处理程序函数中安全调用的异步信号安全函数列表(请参阅链接中的第2.4.2节中的表格)。 mmap()不在该列表中,即从信号处理函数调用mmap()可能会导致未定义的行为。

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