2010-02-16 244 views
4

我试图在使用QList后释放内存,但它似乎无法正常工作。 这里是我的代码: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

+0

看看http://stackoverflow.com/questions/2230618/dynamic-memory-in-qlist – Xorlev

+0

谢谢,但我看起来像我只是做了什么张贴在一个评论(@格伦) – Moomin

回答

3

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

+0

嗯,但似乎在开始时程序只需要460k,创建myList后,附加元素,删除元素,删除myList,它需要16088k。那么哪里超过15000k? – Moomin

+3

当你添加新元素时,你的程序会分配额外的内存,当你删除所有元素时,它会释放这个内存。但是内存管理器保存在这个内存中,并且不会将其返回给操作系统。 –

+0

不错,如果某些其他应用程序需要这部分内存,它可以使用它或内存管理器只保留原始应用程序?有什么办法可以强制回到操作系统? – Moomin

0

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

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

不幸的是,看起来像没有方便的方法来做到这一点,就像.NET中的List.TrimExcess()一样。