2010-02-16 165 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()一樣。