2011-08-25 36 views
5

Başlıkta olduğu gibi: bazı STL konteynırlarının bir nesnesi verildiğinde (örn. std::vector<int> veya std::set<MyClass>) Bellek tüketimini bilmek istiyorum --- yani öğeleri depolamak için ne kadar hafıza tüketilir? her eleman için veri ve konteyner boyutu. Depolanan nesnelerin herhangi bir ek bellek ayırmadığını varsayalım.Toplam STL konteyner bellek tüketimi nasıl ölçülür?

bir std::vector<int> v için ekleyebilir: vektörler öğe başına herhangi bir yardımcı veri depolamak yok

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

için. Ama bunu diğer kaplar için nasıl yapabilirim?

Sürekli olmayan zaman karmaşıklığı ile yaşayabilirim.

+5

Muhtemelen kendi kayıt ayırıcınızı sağlamak en iyisidir. Bu, varolan kod için işe yaramaz, ancak kapsayıcıların belleği ne zaman ve nasıl ayırdığını tam olarak izlemenize izin verir. –

cevap

5

Kendi STL allocator kodunuzu oluşturun ve buna yerleştirilen bellek isteklerinin boyutunu takip edin, daha sonra jsut öğesinin boyutunu ekleyin. This article, bir oluşturma hakkında iyi bir genel bakış sunar.

İlgili konular