컴파일 옵션에 있네요. 아래 글 참고하세요.
http://docwiki.embarcadero.com/RADStudio/Rio/en/C%2B%2B_Linker_Output
MarunGuy 님이 쓰신 글 :
: 32비트 애플리케이션의 사용자메모리주소크기는 2G입니다.
: VC의 경우 /LARGEADDRESSAWARE 플래그를 설정해주면
: 64비트 윈도에서는 4G까지 사용할 수 있습니다.
:
: 빌더님의 mexe 는 실행파일에 /LARGEADDRESSAWARE 플래그를 설정해주는 것으로 보입니다.
:
: 자세한 설명은 아래 링크를 참조하세요.
:
https://docs.microsoft.com/en-us/cpp/build/reference/largeaddressaware-handle-large-addresses?view=vs-2017
:
https://helloacm.com/large-address-aware/
:
: C++ Builder 2007 도 /LARGEADDRESSAWARE 플래그를 설정해주는 방법이 있지않을까요?
:
: 님이 쓰신 글 :
: : 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++ 빌더에서도 계속 이어 받을 수 밖에 없는 구조.
: : :
: : :
: : :