Я пытаюсь подчеркнуть свою программу, которая в основном обновляется с разным количеством строк, которое QTableWidgetHeap использования в QTableWidget в Qt
Каждый раз, когда я делаю какие-то действия, я хочу, чтобы изменить размер таблицы, но перед если он хочет очистить его, а вместе с ним и его содержимое ячейки.
Что я переживаю, так это то, что куча, отслеживаемая с моего монитора ресурсов, только увеличивается.
Это часть кода я бегу, когда я нажимаю кнопку в моем приложении:
MyClass::updateTable(int nrows)
{
ui->tableWidget->clearContents(); // this is to free the memory but the heap always grows
for (int i=0; i<nrows; i++)
{
// I don't like this new I don't know when the destructor is called here!!
QTableWidgetItem *item = new QTableWidgetItem();
item->setText("SOMETEXT");
ui->tableWidget->setItem(i,0,idItem);
}
}
количество строк, как указано в int nrows
очень переменное число (от 10 до 10^5).
Как полностью очистить память от кучи?
Было ли у вас «valgrind» приложение, чтобы увидеть, где вы просачиваетесь? – Karlson
Я пытался «valgrind», но он не нашел больших утечек (часть тех очень маленьких утечек, связанных с использованием библиотек Qt, которые, вероятно, являются ложными срабатываниями). Я пробовал оба с 'ui-> tabWidget-> clearContents(); ui-> tabWidget-> clear(); 'и явно удаляя каждый элемент таблицы. Поведение такое же, valgrind заметил отсутствие утечек, но память, выделенная для O.S. остается большим. Почему? Как происходит распределение памяти в Linux? – linello
Linux помещает освобожденную память в кешированный пул. Увеличивает ли ваш процесс RSS или VSIZE то, что вы видите? – Karlson