我需要分配内存,但不能使用malloc
,因为它不可重入,所以基本上我将使用POSIX mmap
函数实现动态内存分配。是否可以使用mmap
?使用mmap分配内存
5
A
回答
1
编辑:更换折返由线程安全
的malloc是线程安全的大多数操作系统。
你在使用哪一个,你确定它不是线程安全的? 还是你需要它是可重入的(我猜不是)?
5
是的,mmap()应该是可重入的,所以你应该可以使用它。请注意,mmap()通常是一个非常缓慢的操作,因此您可能更好地仅在那些真正需要的情况下(而非希望的情况)使用它,而不是用作通用malloc()替换。
POSIX 2008包含可从信号处理程序函数中安全调用的异步信号安全函数列表(请参阅链接中的第2.4.2节中的表格)。 mmap()不在该列表中,即从信号处理函数调用mmap()可能会导致未定义的行为。
你可以做的是避免在信号处理程序中分配内存,只需设置一些标志,稍后再做实际的工作。
相关问题
- 1. MMAP:无法分配内存
- 2. mmap问题,分配大量内存
- 3. 内存分配阈值(mmap vs malloc)
- 4. mmap是否连续分配堆内存?
- 5. 如何释放使用mmap分配的内存?
- 6. GDB无法访问mmap()内核分配的内存?
- 7. 在OSX上使用mmap()时得到'无法分配内存'错误10.12
- 8. 无法在x86 Linux中使用mmap分配内存Linux汇编语言
- 9. 如果我使用mmap而不是malloc分配内存,该怎么办?
- 10. 在mmap化的内存中动态数组的高效分配
- 11. mmap是否一次分配所有内存?
- 12. 通过mmap分配的内存是否与数据段重叠
- 13. 我有足够的内存,但mmap保持失败,说不能分配内存
- 14. mmap无法分配内存 - 绝对不会出现内存不足
- 15. 使用MemoryStream分配内存
- 16. 使用calloc分配内存
- 17. 使用malloc()分配内存
- 18. 使用AWE分配内存
- 19. 使用mmap从共享内存中读取 - 分割错误
- 20. mmap或malloc分配RAM吗?
- 21. JNI MMAP内存泄漏
- 22. mmap的内存限制
- 23. 内存分配
- 24. 内存分配
- 25. 内存分配
- 26. 内存分配
- 27. 内存分配
- 28. 内存分配
- 29. 内存分配
- 30. 分配内存
“可重入”通常被理解为包括所有叶函数,如`malloc`。 `malloc`没有对你的代码的回调机制,所以无论如何你都无法重新输入它(在同一个线程中)。任何重入将完全在标准libray本身的控制之下。 – MSalters 2011-01-20 12:10:47
@ MSalters:大概他想要在信号处理程序中分配内存,在这种情况下malloc()不可重入是一个问题。 – janneb 2011-01-20 12:21:58
@janneb:不是不允许吗? – MSalters 2011-01-20 21:20:55