void __fastcall TForm1::Button1Click(TObject *Sender)
{
// alloc 512 MB
void *p = malloc(1024ULL * 1024ULL * 512ULL);
if(p)
Memo1->Lines->Add(String().sprintf(L"%p", p));
else
Memo1->Lines->Add("fail..");
}
512메가 할당이 두번 밖에 안되던게
올려주신 mexe 로 패치한 후에 해보니까
5번 이나 할당 되네요. 신기 ~~~
빌더(TWx) 님이 쓰신 글 :
: 가물 님이 쓰신 글 :
: :
: : C++ Builder 2007을 사용하고 있습니다.
: :
: : 컴파일(또는 실행 파일 실행) 후, 사용 메모리가 1,750.4MB 를 넘으면 Out of Memory 에러가 발생합니다.(작업관리자에서 확인)
: :
: : 사용 가능한 메모리 용량을 더 늘릴 수 있는 방법이 있을까요?
: : (project->option->linker->output option 에 Maximum heap size를 변경해도 결과는 같습니다.)
: :
: :
:
:
: 답변:
:
:
: C++ 빌더의 문제점이...
: 메모리 메니지먼트 코드도 델파이로 컴파일 되어있는 RTL에 종속되어 있는 기형적인 구조를 갖고 있다는 거고.
:
: C++ Builder 2007을 갖고있지 않아서...
: 델파이 RTL의 메모리 메니지먼트 내부 코드가 어떻게 구현되어 있는 지는 확인 할 수 없습니다.
:
:
: 콘솔모드 프로그램을 간단하게 만들어서 첨부해 놓았으니...
: 다운 받아서... 타겟 프로그램 네임이 test.exe 라고 하면...
:
: mexe test.exe 엔터 쳐서 실행파일 패치한 후에...
:
: 작업관리자로 타겟 프로그램의 메모리 할당 변화를 확인해 보세요.
: 변화가 없으면 델파이로 컴파일 되어 있는 RTL 메모리 매니지먼트 코드를 손 봐야 합니다.
:
:
: 지금과 같이 델파이로 컴파일 되어 있는 RTL, VCL 에 종속되어 있는 기형적인 구조로는
: 델파이가 갖고있는 문제점들을... C++ 빌더에서도 계속 이어 받을 수 밖에 없는 구조.
:
:
:
|