2010-02-16 4 views
4

QList를 사용한 후에 메모리를 확보하려고하는데 제대로 작동하지 않는 것 같습니다. 그래서 그것을 16088k 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 다음은 내 코드입니다 요소를 삭제하고 삭제하는 것처럼 보입니다. myList 여전히 메모리의 상당 부분이 사용되고 있습니다. 나는 그것을 처리 할 방법이 있다고 생각하지만 그것을 발견 할 수 없다.

    미리 도움을 청하십시오.

    파블

+0

http://stackoverflow.com/questions/2230618/dynamic-memory-in-qlist를 보시고 – Xorlev

+0

고맙습니다 만, 나는 단지 코멘트 중 하나 (@Glen 제공)에 게시 된 것처럼 보입니다. – Moomin

답변

3

메모리 관리자는 프로그램에서 할당 한 메모리를 해제 할 필요가 없습니다. 귀하의 할당 해제에 아무런 문제가 없습니다.

+0

흠.하지만 처음에는 프로그램이 460k 밖에 안되며, myList를 만들고, 요소를 추가하고, 요소를 제거하고, myList를 삭제 한 후에 16088k가 필요합니다. 그렇다면 15000k는 어디에 있습니까? – Moomin

+3

새 요소를 추가 할 때 프로그램이 추가 메모리를 할당하면 모든 요소를 ​​제거 할 때이 메모리가 해제됩니다. 그러나 메모리 관리자는이 메모리를 유지하고 OS에 다시 제공하지 않습니다. –

+0

니스, 그리고 다른 일부 응용 프로그램이 메모리의 일부를 필요로한다면 그것을 사용할 수 있습니까 아니면 메모리 관리자가 원래 응용 프로그램에만 유지? 운영 체제에 강제로 되돌릴 수있는 방법이 있습니까? – Moomin

0

QList는 배열 기반 목록입니다. 배열은 자동으로 확장되지만 자동으로 축소되지 않습니다. 목록에서 요소를 제거해도 배열의 크기에는 영향을주지 않습니다.

배열을 실제 크기로 트림하려면 새 QList를 만들고 내용을 추가하십시오. 그런 다음 원래 목록을 삭제하십시오.

.NET의 List.TrimExcess()처럼 편리하게 사용할 수있는 방법이없는 것 같습니다.