메모 컨트롤의 한계가 아닐까요?
빌더초보 님이 쓰신 글 :
: 안녕하세요. C++ 빌더 QnA 에서 많은걸 배우고 있는 빌더초보입니다.
:
: 32 bit 컴파일러에서 동적으로 생성한 1차원 배열이 최대로 가질 수 있는 크기가 제한이 있나요?
:
:
:
: int size=1024*1024*460;
: int inc =1024;
:
: while (1) {
: char *a = new char[size];
: delete[] a;
: size+=inc;
: Memo1->Lines->Add(size);
:
: }
:
:
:
: 이런식으로 테스트 해봤는데 대략 450~500 메가 사이에서 bad_alloc 에러가 발생하더군요.
:
: 다른 컴퓨터, 다른 빌더버전(2010, XE, XE2)으로 테스트 해봤는데 최대로 생성된 길이가 507메가 였습니다.
:
: TMemoryStream으로도 테스트 해봤는데 비슷하더군요.
:
: 하나의 포인터가 표시할 수 있는 길이의 제한이 있는건가요?
:
:
:
: 다차원 배열로는 기가 단위도 넘기는거 보니 heap 이라는 영역의 제한도 아닌것 같고...
:
: 메모리 단편화 때문이라고 보기엔 항상 저 크기정도에서 에러 나는것도 이상하고...
:
: 32G RAM인 환경에서도 마찬가지였습니다.
:
:
:
: 다시 질문드리자면, 동적으로 생성한 1차원 배열이 가질수 있는 최대 크기가 얼마이며,
: 왜 그렇게 되는지가 알고 싶습니다.
:
: 고수님들 답변 부탁드립니다.
:
:
:
:
|