C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[57953] free로 반환하는데 왜 메모리가 줄지 않을까요.. ㅠㅠ
영악한녀석 [akrnldytpq] 1056 읽음    2009-08-05 23:16
안녕하십니까? 선배님들께 조언좀 구하겠습니다.
malloc으로 메모리 할당하고 free로 반환했는데 왜 메모리 사용량이 줄지 않는건가요?

아래는 메모리 사용을 체크하는 함수입니다.

size_t __fastcall TForm1::MemoryCheck()
{
    PROCESS_MEMORY_COUNTERS PMC;
    HANDLE hProcess = NULL;

    hProcess = GetCurrentProcess();
    if(hProcess == NULL)
    {
        return false;
    }
    GetProcessMemoryInfo(hProcess, &PMC, sizeof(PROCESS_MEMORY_COUNTERS));
    CloseHandle(hProcess);

    return PMC.WorkingSetSize;
}

말록으로 메모리를 잡아보겠습니다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    size_t a;
    Memo1->Lines->Add("━━━━━━━━━━━━━━━━━━");
    a = MemoryCheck();
    Memo1->Lines->Add(IntToStr(a));
    test_malloc = (unsigned int *)malloc(sizeof(unsigned int) * 250);
    a = MemoryCheck();  //메모리가 4kb단위로 늘어남. OS에서 메모리를 4KB단위로 프로세스에게 할당하는것 같음.
    Memo1->Lines->Add(IntToStr(a));
    Memo1->Lines->Add("━━━━━━━━━━━━━━━━━━");
}

free 하겠습니다.
void __fastcall TForm1::Button3Click(TObject *Sender)
{
    size_t a;
    Memo1->Lines->Add("━━━━━━━━━━━━━━━━━━");
    a = MemoryCheck();
    Memo1->Lines->Add(IntToStr(a));
    free(test_malloc);
    a = MemoryCheck();                    /////메모리 줄어들지 않았음 ㅠ.ㅠ
    Memo1->Lines->Add(IntToStr(a));
    Memo1->Lines->Add("━━━━━━━━━━━━━━━━━━");
}

동적 할당을 new로 해보겠습니다.
void __fastcall TForm1::Button4Click(TObject *Sender)
{
    size_t a;
    Memo1->Lines->Add("━━━━━━━━━━━━━━━━━━");
    a = MemoryCheck();
    Memo1->Lines->Add(IntToStr(a));
    test_malloc_new = new unsigned char(256);
    a = MemoryCheck();       ///메모리 할당이 안됨. 수리적으로 256x20 = 5120 OS에서 자원을 안주네요 ㅠㅠ
    Memo1->Lines->Add(IntToStr(a));
    Memo1->Lines->Add("━━━━━━━━━━━━━━━━━━");
}

현재 제가 짜 놓은 테스트 프로그램에서 malloc을 하면 자원을 할당받고 free하면 자원을 반환하지 못하고 new하면 자원을 할당받지 못하고 있는데요.. 과연 무슨 문제 일까요?
제가 생각했던 부분 중에 하나는 바로 TMemo 컴퍼넌트에 데이터가 출력되기 때문이라는 가정을 짓고 free를 1024번 반복시켰으나 메모리가 줄어들지는 않네요.. ㅠ.ㅠ 선배님들!! 좋은가르침 부탁드립니다.
Windows XP 기반입니다. OS가 프로세스들의 메모리를 어떻게 관리 하는지 알고 싶습니다.
코딩시 메모리 누수가 나는 경우가 이리저리 찾아보면 많을 거리 생각 됩니다.
대표적인 malloc 후 free를 안하거나 new 후 delete를 안하는 경우를 제외하고 또 어떤 경우가 있을까요?

+ -

관련 글 리스트
57953 free로 반환하는데 왜 메모리가 줄지 않을까요.. ㅠㅠ 영악한녀석 1056 2009/08/05
57957     Re:free로 반환하는데 왜 메모리가 줄지 않을까요.. ㅠㅠ 박지훈.임프 1357 2009/08/06
57959         Re:Re:free로 반환하는데 왜 메모리가 줄지 않을까요.. ㅠㅠ 영악한녀석 1166 2009/08/06
57966             Re:Re:Re:free로 반환하는데 왜 메모리가 줄지 않을까요.. ㅠㅠ 아제나 1328 2009/08/07
57978                 Re:Re:Re:Re:free로 반환하는데 왜 메모리가 줄지 않을까요.. ㅠㅠ 영악한녀석 1514 2009/08/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.