在c++中使优先级队列限制其内存
Make a priority queue limit its memory in C++
我在c++中使用priority_queue<unsigned long,vector<unsigned long>,greater<unsigned long> >
,我的内存限制为16MB。我的程序只需要10MB,但是一旦它达到8653464字节,它就会尝试将其容量加倍,并抛出bad_alloc
。
是否有办法停止使用我当前的实现?如果我从vector
切换到deque
, priority_queue
还能有log(n)时间吗?
切换到deque
是非常明智的方法。它以固定的数字增长,而不是像vector
那样以x2增长。复杂度应该保持在O(log N)
。
当然。priority_queue
是一个容器适配器,默认情况下它基于vector
。我认为解决这个问题最简单的方法是找一个向量的子类它不会变得太大当它接近极限时不会翻倍,而只是接近极限。您也可以使用常规的vector类,但使用自定义分配器,但这可能需要更多的工作。
vector
提供比deque
更糟糕的复杂性,而deque
的增长更可预测和可控。如果您不需要在上帝的绿色地球和蓝色地球上绝对最快的迭代(或对C数组的兼容性),那么deque
是所有用途的最佳容器。
相关文章:
- 内存排序在提升::无锁:队列
- 如何通过 malloc 为队列数组分配内存?
- 使用加速进程间创建消息队列 - 内存访问冲突
- 在堆或堆栈上分配的 std::队列的内存
- 将uint32_t添加到不同命名空间中的队列时出现内存泄漏
- 使用队列的非递归回溯:内存不足
- 为什么使用Swap()时STD ::队列不会释放内存
- 可视标准::队列内存消耗导致内存泄漏 - C++
- 关于在这种情况下消息队列与共享内存的适用性或适用性
- C++ 队列内存泄漏
- 从内存转储中查找线程消息队列中的消息
- 堆栈/队列 C++ 中的内存泄漏
- 无法从阵列队列中手动释放内存
- 写入共享内存队列时出现隔离错误
- 是否有一个快速的内存中队列,我可以使用它在达到一定大小时交换项目
- 优先级队列中可能存在内存泄漏
- boost::lockfree::队列似乎没有释放内存,尽管每个集合对象上的析构函数都被调用
- 使用堆栈和队列的Infix到Postfix:无法访问内存c++
- 队列中pop()上的内存浪费
- 如何为队列释放内存?我的不免费