QList内存释放

4

我试图在使用QList后释放内存,但似乎无法正常工作。 以下是我的代码:

QList<double> * myList;
myList = new QList<double>;

double myNumber;

cout << "CP1" << endl;
getchar();  // checkpoint 1

for (int i=0; i<1000000; i++)
{
    myNumber = i;
    myList->append(myNumber);
    cout << myList->size() << endl;
}

cout << "CP2!" << endl;
getchar();  // checkpoint 2


for (int i=999999; i>0; i--)
{
    myList->removeLast();
    cout << myList->size() << endl;
}

cout << "CP3!" << endl;
getchar();  // checkpoint 3

delete myList;

cout << "CP4!" << endl;
getchar();  // checkpoint 4

内存使用情况:

  • CP1: 460k
  • CP2: 19996k
  • CP3: 19996k
  • CP4: 16088k

尽管删除了元素并删除了myList,看起来仍然使用了大量的内存。我相信有一种处理方法,但我找不到它。

感谢您提前的帮助。

Pawel


请查看https://dev59.com/IEvSa4cB1Zd3GeqPht7_。 - Xorlev
谢谢,但我看起来只是按照评论中@Glen发布的内容完成了。 - Moomin
2个回答

3

内存管理器不需要释放您的程序分配的内存。您的释放没有问题。


嗯,但似乎在开始时程序只需要460k,在创建myList、添加元素、删除元素和删除myList之后,它需要16088k。那么超过15000k在哪里呢? - Moomin
3
你的程序在添加新元素时会分配额外的内存,当你删除所有元素时,它会释放此内存。但内存管理器仍然保留这些内存并不将其归还给操作系统。 - Nikola Smiljanić
很好,如果其他应用程序需要该部分内存,它是否可用,还是内存管理器仅为原始应用程序保留它?有没有办法强制将其归还给操作系统? - Moomin
这不是你应该担心的事情。如果系统的内存不足,它可能会从你的程序中释放内存,并将其用于需要内存的程序。 - Nikola Smiljanić

0

QList是基于数组的列表。数组会自动扩展,但不会自动收缩。从列表中删除元素不会影响数组的大小。

要将数组修剪到实际大小,请创建一个新的QList并将内容添加到其中。然后删除原始列表。

不幸的是,似乎没有像.NET中的List.TrimExcess()这样的便捷方法来执行此操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接