빌더(TWx) 님이 쓰신 글 :
: 뽀뽀중 님이 쓰신 글 :
: : 안녕 하세요.
: :
: : 많은 양의 계산결과를 vector 와 구조체를 조합하여 메모리에 저장하는 방법을 사용하고 있습니다.
: : new 같은 동적할당은 전혀 하지 않았습니다.
: :
: : 재계산을 할 경우에는 기존 vector 에 저장된 값을 초기화 하고 다시 입력을 합니다.
: : 이렇게 하면, 메모리 사용량이 증가를 할수가 없는데, 윈도우작업관리자로 보면 메모리사용량이 증가 하고 있습니다.
: :
: : 이 부분을 보완해야 할것 같은데, 어느 vector 에서 사용량이 증가하는 지 확인 하는 방법이 있나요?
: :
: :
: : 저장할 구조체
: :
: : struct TNE_RainDistCal { // 1차반복
: : AnsiString AsRainDistName; // 강우분포 이름
: : AnsiString AsRainDistSimbol; // 강우분포 기호
: :
: : struct FreqRainDist FreqRainDistData;
: : vector<FreqRainDist>veFreqRainDist;
: :
: : TNE_RainDistCal() {
: : Clear();
: : }
: :
: : void Clear() {
: : AsRainDistName = "";
: : AsRainDistSimbol = "";
: :
: : FreqRainDistData.Clear();
: : veFreqRainDist.clear();
: :
: : ZeroMemory(this, sizeof(*this));
: : }
: : };
: :
: : extern TNE_RainDistCal TNE_RainDistCalData;
: : extern vector<TNE_RainDistCal>veRainDistCalResult;
: :
: : 이런식으로 구조체를 정하고,
: : 초기화는 TNE_RainDistCalData.Clear();
: : veRainDistCalResult.clear();
: :
: : 이런식으로 하였습니다.
: :
:
:
:
: 답변:
:
:
: vector도 잘못 사용하고 있고...
: 전체 소스코드 구조를 보지 않고선 메모리 누수의 원인을 판단할 수 없어요.
:
: wdmdrv@outlook.kr 로 프로젝트 전체소스 압축해서 보내보세요.
:
: 버그를 진단하는 데에 어느 정도의 비용이 발생할 수도...
:
:
:
안녕 하세요.
답변 감사 드립니다.
벡터에 문제가 있다는 의견에 따라, 벡터의 메모리 해제 관련 하여 검색을 해 보았더니,
메모리 해제 하는 방법에 문제가 있음을 알게 되었습니다.
.clear() 한다고 벡터 메모리가 삭제되는것은 아니라는 것을 알게 되었습니다.
입력한 자료는 삭제되겠지만, 벡터가 확보한 메모리는 그대로 존재하는 것을 이해하게 되었습니다.
http://blog.naver.com/lsm_origin/220056735792 글을 보고 알게 되었습니다.
vector<TNE_RainDistCal>().swap(veRainDistCalResult);
와 같은 방법으로 모든 구조체를 초기화 하니, 메모리 증가 현상은 사라 졋습니다.
답변에 감사 드립니다.