다음과 같은 상황에서 GCC 런타임에서 어떤 일이 벌어지고 있는지 이해하고 싶습니다.C++에서 delete가 호출 되더라도 프로세스는 언제 할당 된 메모리를 유지합니까?
나는 많은 메모리 블록을 할당하고 삭제하는 C++ 프로그램을 가지고있다. 수수께끼 같은 것은 메모리가 GCC 런타임에 의해 OS로 반환되지 않는다는 것입니다. 대신, 그것은 여전히 내 프로그램에 의해 유지되고있다, 나는 가까운 장래에 유사한 메모리 덩어리를 할당하려는 경우에 대비한다.
다음 프로그램은 어떻게되는지 보여줍니다
#include <iostream>
using namespace std;
void pause1()
{
cout << "press any key and enter to continue";
char ch;
cin >> ch;
}
void allocate(int size)
{
int **array = new int*[size];
for (int c = 0; c < size; c++) {
array[c] = new int;
}
cout << "after allocation of " << size << endl;
for (int c = 0; c < size; c++) {
delete array[c];
}
delete [] array;
}
int main() {
cout << "at start" << endl;
pause1();
int size = 1000000;
for (int i = 0; i < 3; i++) {
allocate(size);
cout << "after free" << endl;
pause1();
size *= 2;
}
return 0;
}
내가 "추신 -e를 실행하여 각 일시 정지 (전혀 메모리를 유지하지 않아야 할 때)에서 처리가 보유한 메모리의 양을 확인 - o vsz, cmd ".
2648kb - at start 18356kb - after allocating and freeing 1,000,000 ints 2780kb - after allocating and freeing 2,000,000 ints 65216kb - after allocating and freeing 4,000,000 ints
내가 페도라 코어 6에서 실행하고있어 사용하여 GCC 4.1.1 :
각 일시에 처리가 보유 금액은 다음과 같다.
왜 이것이 문제입니까? 기억에 남는 일이 없습니까? – jalf
메모리 사용량이 많은 동안에는 스와핑으로 인해 시스템 속도가 느려집니다. 메모리가 실제로 응용 프로그램에 의해 해제 된 경우 피하고 싶습니다. –