안녕하세요. 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차원 배열이 가질수 있는 최대 크기가 얼마이며,
왜 그렇게 되는지가 알고 싶습니다.
고수님들 답변 부탁드립니다.
|