问题:
我正在处理非常大的数据集,最多 8 * 1024 * 1024 个身份;
- 我预先分配了一个结构数组,由 void * 部分指向。
“空闲”指针被压入堆栈,在使用时弹出,并在从 hash_map 中删除时压入。(这接近 256mb 的内存)
我已经确定大部分系统时间/性能消耗在 std::hash_map 的添加操作中。
结构顺序;std::hash_map 订单数据库;
我真正想做的就是将 MAX_ORDERS 传递给构造函数:
std::hash_map OrderDatabase(MAX_ORDERS);
// 并让它预先分配容器,以便插入/删除不涉及 malloc/free。
建议表示赞赏!我试图严格遵守 STL/C++ 作为旁注。
编辑/更新:
我还尝试了以下方法:
hash_map 地图测试;hash_map::allocator_type MapAlloc = MapTest.get_allocator();
对 *ary = MapAlloc.allocate(MAX_ORDERS); // 这里的问题是 ulonglong 是 const!
想法是将每个都推入堆栈,然后弹出分配,并使用 insert 而不是 maptest[id] = ptr;
//更新2:
- 创建stack<pair *> pointer_stack,并推送预分配的指针,
- 弹出一个指针。赋值;
- 插入 hash_map:
- 找到该项目,获取指向地址的指针:尽管我调用了 insert,但 hash_map 似乎分配了一个新对。
这使得移除和推送到堆栈是不可行的。