我需要分配內存,但不能使用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