回答
甲內存分配器不是較低水平比malloc
。 (默認分配器通常直接或間接呼叫malloc
)
分配器只允許您指定不同的分配策略。例如,您可以使用一次調用malloc
的分配器來檢索大量內存池,然後對於後續的分配請求,它只返回該池中的一小塊。
或者您可以將它用作鉤子,以便您在每次分配內存或釋放內存時執行一些額外的任務。
至於你的第二個問題,malloc
是你可以走的最低而不會丟失可移植性。 malloc
通常使用一些OS特定的內存分配函數來實現,因此它仍然是較低的級別。但這與你的主要問題無關,因爲C++分配器是更高級別的抽象。
+ 1-有許多分配策略,malloc只是一個儘可能具有普遍性能的分配策略。 – Puppy 2011-01-10 00:34:12
自定義內存分配器是malloc
(實際上,通常代替operator new
)的替代品,它以非默認方式檢索字節塊。 malloc
不是您可以去的最低級別,因爲malloc
本身是通過操作系統中更簡單的基元來實現的,這些基元爲分區分配內存塊。
制定自定義分配器的常用用例針對小對象的分配進行了優化(默認分配器通常非常糟糕),以確保良好局部性的方式進行分配(通過將對象分配給另一個對象),使用logging /跟蹤(用於診斷泄漏),從垃圾收集資源池中分配等等。有很多不同的選項可供選擇,許多程序可以使用這些自定義分配器來提高性能。
malloc()是libc(或glibc)中的一個庫函數,它在系統調用sbrk()時需要實際分配更多內存給進程。 malloc()和free()管理malloc(),calloc()等被調用時使用的內存塊列表。
當不需要malloc()的行爲或者您想在malloc/free之上做額外的工作時,您可以使用自定義分配器。
下面的文章(我寫的)中有對自定義分配器的廣泛描述以及他們的經驗性評估。在您決定在您的 C++項目中使用自定義分配器之前,您應該閱讀本文。執行概述是好的通用分配器比除地區之外的所有樣式的自定義分配器更好(更快且更節省空間),但這些分配器存在嚴重問題。
反思定製內存分配(ACM link,direct PDF link,Powerpoint talk slides)2002年OOPSLA。
程序員希望實現 性能改進通常使用 自定義內存分配器。這個深入研究的 檢查使用定製 分配器的八個 應用程序。令人驚訝的是,對於 這六個應用程序,最新的 通用分配器(Lea 分配器)的性能好於自定義分配器,或者性能分配器的性能好於 。 兩個例外使用區域,其中 提供更高的性能 (改進高達44%)。地區 也減少程序員的負擔和 消除內存泄漏的來源。然而,我們表明, 程序員無法在區域內釋放個別對象 可能導致內存消耗的大幅增加 。更糟的是,這種限制 排除了 常見的編程風格使用的區域,減少 他們usefulness.We呈現 概括的通用和 基於區域的分配器,我們稱之爲 人收割。收割是 區域和堆的組合,提供完整的 範圍的區域語義與 添加個別對象 刪除。我們表明,我們的 實施收益提供了高性能,優於其他 分配器與區域般的語義。 然後我們用一個案例研究來證明 在實踐中的空間優勢和 軟件工程帶來的收益 的好處。我們的結果表明 需要快速區域 的程序員應該使用reaps,而且大多數考慮自定義 分配器的程序員應該使用分配器來使用Lea 。
內存分配器用於優化速度。 操作系統分配緩慢。因此,您自己的內存管理器會抓取大量內存,然後從內存分區中爲您分配內存,而無需通過操作系統。這種技術在遊戲/遊戲機/嵌入式系統中更常用。
http://www.memorymanagement.org/articles/
http://www.ibm.com/developerworks/aix/tutorials/au-memorymanager/au-memorymanager-pdf.pdf
- 1. 內存分配C++
- 2. 內存分配,C++
- 3. C內存分配
- 4. C++分配內存
- 5. 內存分配C
- 6. C++內存分配在C
- 7. C++內存分配器體系結構
- 8. C++容器的內存分配
- 9. C++內存分配 - 分配子類到
- 10. 內存泄漏在C /內存分配++
- 11. C中的內存分配
- 12. C內存分配錯誤
- 13. C函數分配內存
- 14. C++可變內存分配
- 15. C++中的內存分配
- 16. 內存分配在C
- 17. C++內存分配問題
- 18. 高級C內存分配
- 19. C++分配內存一類
- 20. C++分配內存缺點?
- 21. C:分配內存混亂
- 22. C內存分配問題
- 23. 目標C:分配內存
- 24. C++分配內存問題
- 25. track C++內存分配
- 26. C++中的內存分配
- 27. 內存分配在C#
- 28. 向量C++內存分配
- 29. 內存分配在obj c
- 30. 在C++中用void *分配內存結構內存分配
@muntoo:這完全不提分配器。 – jalf 2011-01-10 00:18:03
@jalf我還在學習如何閱讀。 – 2011-01-10 00:49:20