아래 VECTOR 용량줄이기 2편
아래와 같은 방법으로 테스트 해 봤습니다.
시스템은 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;
}
아래에서도 비슷한 답변이 나왔지만, free시 바로 반환된다는 보장은 없
아래에서도 비슷한 답변이 나왔지만, free시 바로 반환된다는 보장은 없습니다.
또한 사용하신 컴파일러가 무엇인지는 잘 모르겠으나 대부분의 경우 디버그 모드에서는 백트래킹등의 용도로 바로 반환하지 않는 걸로 알고 있습니다.
malloc/free pair를 루프를 사용해서 여러번 돌려보시면 무한정 늘어나지는 않을겁니다. 8)
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
댓글 달기