2011-08-25 71 views
5

在標題中給出:給定一個STL容器類型的對象(例如std::vector<int>std::set<MyClass>),我想知道它們的內存消耗---也就是---消耗多少內存來存儲元素,輔助每個元素的數據和容器大小。我假設存儲的對象不分配任何額外的內存。如何測量STL容器的總內存消耗量?

對於std::vector<int> v我可以添加:

sizeof(std::vector<int>) + v.capacity()*sizeof(int) 

因爲載體不存儲每個元素的任何輔助數據。但我怎麼能爲其他容器呢?

我可以忍受非恆定的時間複雜性。

+5

可能最好提供您自己的日誌分配器。這對現有的代碼不起作用,但它可以讓你準確地跟蹤容器何時以及如何分配內存。 –

回答

5

創建自己的STL allocator並跟蹤放置到它的內存請求的大小,然後添加容器本身的大小。 This article給出了創建一個很好的概述。