2014-11-27 2 views
0

Я создал очередь приоритетов STXXL в своей программе. Если мне больше не нужен PQ, как его удалить? Так же, как delete [] buffer в C++. Я хочу освободить используемую им память.Как удалить очередь приоритетов STXXL?

Я просмотрел 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); 
+0

Кажется, что он работает так, как можно было бы ожидать в C++, то есть память выделяется при уничтожении объекта. У вас есть какие-то признаки того, что это не так? – molbdnilo

+0

По каким-то причинам мне нужно определить 8 pqs в моей программе, когда общая память, занимаемая PQ, превосходит число памяти моего компьютера (например, 4G, ubuntu), она работает медленно, поэтому я хочу удалить некоторые pq, которые не нуждаются в каких-либо Больше. – Charlie

+0

@Charlie: Этого можно ожидать от STXXL. Он использует ваш диск в дополнение к памяти, но память намного медленнее. – MSalters

ответ

0

Когда Q1 выходит из сферы действия, память автоматически освобождается. Поэтому не ставьте все в одну большую функцию. Положите Q1 и все, что вы делаете с ним, в одну функцию, а Q2 - в другую функцию.

Самая большая проблема, если Q1 необходим для создания Q2, а Q2 необходим для создания Q3 и т. Д. В этом случае std::unique_ptr<pqueue_type0> может быть удобно.

Смежные вопросы