EDITED 該代碼在VS2010中以Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
編譯爲32位,並在Win7 64位機器上運行。爲什麼插入空結構保留向量增加內存?
程序爲空main
機身需要1KB的內存。
The sizeof(Bag)=32
。 (=短字符串的內部緩衝區爲16字節+如果字符串大於16字節則加4字節指向內存+字符串的其他內容)。
保留200,000個元素後,矢量v
需要6400KB的內存。因此,直到現在的總內存是7400KB。
我不明白的是,在插入100,000個元素(小於預留容量v
)到v
後,內存使用量增加到14,800KB。如果我和int
替換string
這樣的總使用存儲器將是因爲它應該是1,800KB(= 1000KB + 200 * 4B)
1. struct Bag
2. {
3. string s;
4. };
5. vector<Bag> v;
6. v.reserve(200000);
7. for(int i = 0; i < 100000; ++i)
8. {
9. v.push_back(Bag());
10. }
你是如何驗證內存使用情況? – Chad
使用'任務管理器'。我知道這可能不是最準確的工具,但它在各種機器上顯示非常確定性的內存行爲(當然具有相同的架構)。 – theateist
您是否正在運行完全優化,因此不會生成不必要的副本?你可以嘗試用一個'resize(100000)'替換'push_back()'調用嗎? – Chad