아래 VECTOR 용량줄이기 2편

siger74의 이미지

아래와 같은 방법으로 테스트 해 봤습니다.
시스템은 hp-unix 이며 30m씩 동적할당을 3번하고
해제해 보았습니다.

할당후 프로세스의 데이터 메모리 정보
Data RSS/VSS:90mb/90mb

하지만 해제후 프로세스의 데이터 메모리 정보
Data RSS/VSS:90mb/90mb

오래 기달려도 동일합니다.

#include <memory.h>

typedef struct __data{
char str_Data[3000 +1];
} ST_Data;

int main()
{

ST_Data* m_stData1;
ST_Data* m_stData2;
ST_Data* m_stData3;

m_stData1 = new ST_Data[10000];

memset(m_stData1, 0x20, sizeof(ST_Data)*10000);

// 데이터 영역 memeory : 30M 증가

m_stData2 = new ST_Data[10000];

memcpy(m_stData2, m_stData1, sizeof(ST_Data)*10000);

// 데이터 영역 memeory : 30M + 30M 증가

m_stData3 = new ST_Data[10000];
memcpy(m_stData3, m_stData2, sizeof(ST_Data)*10000);

// 데이터 영역 memeory : 30M + 30M +30M 증가

delete [] m_stData1;

delete [] m_stData2;

delete [] m_stData3;


// 데이터 영역 memeory : 30M + 30M + 30M
// 해제되지 않음


// 새로 할당
m_stData1 = new ST_Data[10];
memset(m_stData1, 0x20, sizeof(ST_Data)*10);
// 30M + 30M + 30M

m_stData2 = new ST_Data[10];
memcpy(m_stData2, m_stData1, sizeof(ST_Data)*10);
// 30M + 30M + 30M

m_stData3 = new ST_Data[10];
memcpy(m_stData3, m_stData2, sizeof(ST_Data)*10);
// 30M + 30M + 30M

delete [] m_stData1;

delete [] m_stData2;

delete [] m_stData3;

return 1;

}

M.W.Park의 이미지

아래에서도 비슷한 답변이 나왔지만, free시 바로 반환된다는 보장은 없습니다.
또한 사용하신 컴파일러가 무엇인지는 잘 모르겠으나 대부분의 경우 디버그 모드에서는 백트래킹등의 용도로 바로 반환하지 않는 걸로 알고 있습니다.
malloc/free pair를 루프를 사용해서 여러번 돌려보시면 무한정 늘어나지는 않을겁니다. 8)

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂