메모리 관리자가 2G 넘는 단일블럭을 지원 안할 뿐입니다.
1G 씩 짤라서 여러번 할당하면 잘 됩니다
(C#, Java도 2G넘는 블럭을 할당 할 수 없습니다... 현실적으로 블럭크기에 관계없이 할당 가능한 컴파일러는 VC++/IC++ 정도인듯)
윤승환 님이 쓰신 글 :
: 델마당에도 질문을 올렸는데 아무래도 64bit 프로그래밍해보신 분이 많지 않은 것 같네요.
: 경험있으신 분 의견 좀 부탁드립니다.
:
:
: ---------------------------------------------------------------------------
: XE2 Professional 구입/설치 후 처음 확인해보는 것이 64bit를 지원하는가였습니다.
:
: 테스트 방법의 문제인지 뭔가 설정을 해야하는데 빠뜨린 것인지
: 2GB를 초과하는 메모리쓰기는 여전히 실패하는군요.
:
:
: 64bit 프로그래밍해보신 분 계신지요?
:
:
:
: 환경: Windows 7 64 bit, 8GB RAM, 16GB 페이지 파일
:
:
: 1. target platform을 Win64로 변경하고 Win32는 삭제..
: 2. 아래 코드 입력 후 실행하면 정상 동작합니다.
:
: 3. 이제 GBSIZE=3로 변경 후 재실행 -> 오류 발생
:
:
:
: procedure TForm1.FormCreate(Sender: TObject);
: const
: GBSIZE =2;
: var
: pMem :PByte;
: nSize :Int64;
: i :integer;
: begin
: nSize :=1024*1024*1024{GB};
: nSize :=nSize*GBSIZE;
: pMem :=AllocMem(nSize);
:
:
: for i := 0 to GBSIZE*1024*1024-1 do
: TRY
: FillChar(pMem[i*1024],1024,0);
: EXCEPT
: OutputDebugString(PWideChar(Format('%d',[i])));
: END;
: end;
|