2013-04-26 42 views
1

是否可以重寫STL分配,管理和釋放內存的方式?如果可能的話,會怎麼做呢?有沒有辦法做到這一點,以保持在一個類或文件中處理原始內存的代碼?重寫內存分配方法標準庫使用?

我想這樣做我的整個程序,所以我可以跟蹤內存使用情況,時間和生命週期信息。純粹出於好奇當然!

+0

是的......這很難......而且......你可以通過使用valgrind來達到同樣的效果嗎? – 2013-04-26 07:31:03

+0

如果你在linux上,你可以看看男人(2)brk和sbrk。不知道在Windows上。 – Nbr44 2013-04-26 07:31:22

+1

你必須替換運算符'new'和'delete',所以運行 - 不要走到書店,並獲得[Effective C++]的第8章(http://www.amazon.com/Ectivective-Specific-Improve -Programs-Designs/dp/0321334876) – TemplateRex 2013-04-26 07:34:08

回答

1

使用動態存儲持續時間管理數據的標準庫類以allocator作爲其模板參數之一。然後該類將調用分配器的一個實例進行內存管理。例如,您可以執行std::vector<int, MyAllocator> somevec;std::list<Node*, MyAllocator> someList;向容器提供自定義分配器。

這是SO Q&A about allocators。鏈接的答案包括分配器的骨架代碼,這應該是一個很好的起點。

+0

唉,是的,我忘了分配器是一個模板參數。我依稀記得他們被描述爲編碼的複雜事務,但我會給出一個迴旋 – 2013-04-26 10:41:39

+1

實際上,一個基本的分配器很容易製作。看看我的答案中包含的鏈接中列出的要求。這裏還有一些框架代碼來創建標準庫兼容分配器 - http://stackoverflow.com/a/12529302/845568 - 它應該是一個體面的開始。 – 2013-04-26 13:05:45