【问题标题】:How to delete a STXXL priority queue?如何删除 STXXL 优先级队列?
【发布时间】:2014-11-27 09:17:09
【问题描述】:

我在我的程序中创建了一个 STXXL 优先级队列。 如果我不再需要PQ,如何删除它?就像 C++ 中的 delete[] 缓冲区一样。 我想释放它使用的内存。

我查看了their examples and description,但找不到路。 一旦创建了PQ,内存会一直被这个PQ占用到程序结束吗?

例如,如果我定义了两个优先级队列:Q1 和 Q2。

typedef stxxl::PRIORITY_QUEUE_GENERATOR <
   SufNode<unsigned char>,
   ComparatorGreater<unsigned char>,
   mem*1024*1024, 1024*1024
 >::result pqueue_type0;

 pqueue_type0 Q1(pool1); 

然后我对 Q1 做一些事情,然后删除它,这样我就可以为 Q2 分配更多内存。

typedef stxxl::PRIORITY_QUEUE_GENERATOR<
   SufNode<unsigned char>,
   ComparatorGreater2<unsigned char>,
   mem*1024*1024, 1024*1024
>::result pqueue_type20;

pqueue_type20 Q2(pool2); 

【问题讨论】:

  • 它似乎像人们在 C++ 中所期望的那样工作,即当对象被销毁时释放内存。你有任何迹象表明它没有?
  • 由于某些原因,我需要在我的程序中定义8个pqs,当PQ占用的总内存超过我的电脑内存(即4G,ubuntu)时,它运行缓慢,所以我想删除一些不再需要的 pq。
  • @Charlie:这正是 STXXL 所期望的。除了内存之外,它还使用您的磁盘,但内存要慢得多。

标签: c++ priority-queue stxxl


【解决方案1】:

当 Q1 超出范围时,它的内存将被自动释放。所以不要把所有东西都放在一个大函数中。将 Q1 和你用它做的事情放在一个函数中,将 Q2 放在另一个函数中。

如果需要 Q1 来创建 Q2,并且需要 Q2 来创建 Q3 等等,那么最大的问题是。在这种情况下,std::unique_ptr&lt;pqueue_type0&gt; 可以很方便。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 2011-12-20
    • 2021-01-07
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多