問題:std :: map的預分配<unsigned long long,void *>,如何正確預分配?
我正在處理非常大的數據集,最多可以處理8 * 1024 * 1024的標識;
- 我已經預先分配的結構的陣列,通過空隙*部分指向。
的「自由」指針堆棧上推動,彈出,因爲它們被使用,並推,因爲它們是從的hash_map除去。 (這是接近256mb的內存)
我已經確定大部分系統時間/性能是在std :: hash_map的添加操作中使用的。
struct Order; std :: hash_map OrderDatabase;
我真的很想做的,僅僅是通過MAX_ORDERS到構造函數:
的std ::的hash_map OrderDatabase(MAX_ORDERS);
//並具有使插入/刪除不參與的malloc /自由是預先分配的容器。
建議感激!我試圖嚴格遵守STL/C++作爲附註。
編輯/更新:
我也試過如下:
的hash_map MapTest; hash_map :: allocator_type MapAlloc = MapTest.get_allocator();
對*進制= MapAlloc.allocate(MAX_ORDERS); //這裏的問題是,ulonglong是const!
的想法是推每一個對一個堆棧,並且彈出了ALLOC,和使用插入來代替maptest [ID] = PTR;
//更新2:
- 創建堆棧<對*> pointer_stack,並推動預分配指針,
- 彈出的指針。分配值;
- 插入到hash_map中:
- 找到該項目,獲取一個指向該地址的指針:即使我調用insert,它似乎仍會分配一個新對。
這使得去除&推動堆棧不可行。
我將重新編輯它,它應該是後視Hash_map。此外,系統上的內存將在24-48gb範圍內,任何內存 - >時間折衷都是需要的。預留內存即使從未使用過,也是最佳的。 –
'hash_map'與C++ 11/Boost中的'unordered_map'類似,只是我沒有看到SGI/VC++實現具有'reserve()'方法,所以請嘗試使用Boost或C++ 11中的一個,可能會更好。 – hamstergene
怎麼樣排序數組建議 - 有什麼妨礙您使用它? – hamstergene