由於malloc/calloc是在stdlib中爲C定義的舊實現。 有沒有什麼更好的實現可以替代malloc/calloc? 請不要回答關於malloc/calloc方法的任何包裝方法。 在C中分配內存的新實現不應該調用malloc/calloc而不是它應該實現自己的方法。有沒有比malloc/calloc更好的實現在C中分配內存?
回答
你試過calloc()
功能嗎?我從來沒有用過它,但有些人有過。
calloc只是malloc,其分配的內存爲零 – 2012-01-17 10:56:32
@Paul R.是的,但考慮到原始問題缺乏有用的要求,這很容易被認爲是「更好的實現」。 – Roddy 2012-01-17 11:24:47
除非你的應用程序是多線程的,否則你可能不應該打擾。 This article suggests (for one platform, at least) that malloc
performs quite competitively in a single threaded environment。
那麼,你應該在你的應用程序中使用哪個分配器?對於單一線程代碼,Solaris OS上的
malloc
顯示爲強有力的選擇。
你將很難做得比malloc
或它的非常類似的功能。如果你想要更好的內存分配,你可以打包malloc
或者調用操作系統的內存分配函數(但是在可移植性上失去了),並將自己的分配邏輯放在內存塊的頂部。
如果你真的需要一個更好的內存分配,儘量Hoard:
囤積內存分配器是一個用於Linux,Solaris和Mac OS X的一個快速,可擴展和內存高效的內存分配,和視窗。 Hoard是malloc的一種替代品,可以顯着提高應用程序的性能,特別是對於在多處理器和多核CPU上運行的多線程程序。
注意it's not necessarily free。如果你想要一個免費的,請嘗試one of these。
在谷歌的一個快速搜索顯示我沒有其他C方法來分配內存像malloc一樣有效(照顧內存對齊等)。從我看到它非常努力和難以嘗試創建你自己的malloc-replacement ...
你可以使用brk()
和sbrk()
但它們不是標準C的一部分,它們只能在Unixy系統上正常工作。 mmap()
也值得一看,但它看起來像具有相同的缺點。
- 1. 有沒有更好的實現方法?
- 2. 有沒有更好的實現方法?
- 3. 有沒有更好的方法來實現這種內存管理?
- 4. 有沒有更好的選擇在Scala中實現Builder模式?
- 5. 有沒有更好的方式在C++中實現Java類本地類?
- 6. R:在e1071包中是否有比libsvm更好的SVM實現?
- 7. 有沒有比CGContext更好的選擇?
- 8. 有沒有比libnotify更好的東西?
- 9. 有沒有比reCaptcha更好的東西?
- 10. 虛擬內存分配沒有物理內存分配
- 11. 有沒有比內置的更好的Eclipse重構工具?
- 12. C++中沒有「新」關鍵字的內存分配
- 13. 沒有足夠的內存分配?
- 14. 的sprintf沒有內存分配
- 15. VHDL分配片沒有實現?
- 16. C#中有沒有Int24的實現?
- 17. C:有條件的內存分配
- 18. 有沒有比permcalc更好的工具來分析權限?
- 19. Solr模糊匹配比精確匹配有更好的分數
- 20. 有沒有比SQL存儲過程更好的方法?
- 21. 沒有在Eclipse中實現的更改
- 22. 有沒有Java7的Hashmap實現比Java8的實現更受歡迎的場景
- 23. 有沒有比用system()更好的在C++中提取命令的方法?
- 24. 錯誤在C:合併排序的實現 - 內存分配
- 25. 有沒有比在SQL中使用FOR XML更好的選擇
- 26. 在OSX中有沒有比Navicat更好的東西?
- 27. 在JavaScript中有沒有比setTimeout更好的東西?
- 28. 是否爲沒有實例變量的對象分配內存?
- 29. 有沒有更好的方法來實現搜索地圖?
- 30. 有沒有更好的方法來與react.js實現對話?
沒有「更好」的質量,只有基準。 – 2012-01-17 10:24:59
你卡在C中嗎?或者你也可以使用C++嗎?你會有新的關鍵。但要小心,如果你將malloc/free與new/delete混合使用。這種方法應該做什麼樣的工作? (例如,是否可以設置最大尺寸數組,是已知的類型...) – Beachwalker 2012-01-17 10:27:29
* malloc是舊的實現*舊的,因此破碎,對吧? – 2012-01-17 10:29:30