|
메모리 할당은 크게 3가지 입니다.
1. DATA 영역 : 전역변수 할당등
2. STACK 영역 : 함수호출 매개변수 및 지역변수 할당
3. HEAP 영역 : 동적할당
3가지 중에 HEAP영역에서의 할당이 시간이 제일 오래걸립니다.
용량이 커질경우에는 너덜너덜해지죠.
빠르게 하시려면 [남병철.레조]님 말씀대로 DATA나 STACK영역에 할당할 경우
HEAP영역에서의 할당보다 훨씬 빠른 처리 속도를 가질 수 있습니다. (포트란 에서의 처리)
( 하지만 무엇보다 늦는 것은 하드디스크의 입출력 시간입니다. )
이용태 님이 쓰신 글 :
: 바이너리 파일이 있습니다.
:
: 파일 사이즈는...
:
: sizeof(unsigend char)*500*500*1750 = 437500000 bit = 417.2MByte 입니다.
:
: 이 데이터를 한번에 읽어서 메모리에 올릴려고 하는데요...
:
: 다음과 같이 해봤는데... 메모리에 데이터를 복사하는 시간이 5~10초 정도 걸립니다.
:
: //<-- 파일 열고
: pOpenStream->Seek(HEADER_SIZE,soFromBeginning);
: //동적으로 메모리 생성하고
: pFullData = new unsigned char[1750*500*500];
: //파일에서 데이터 읽어온다. 이부분에서 5~10초 정도 걸립니다.
: pOpenStream->Read((void*)pFullData, sizeof(unsigned char)*1750*500*500);
:
: 이것을 좀더 시간을 단축시켜 빨리 메모리에 올릴 수 있는 방법이 있을까요?
:
: 아.. 그리고.. 가끔씩 new로 데이터 메모리 할당할때도 bad_alloc() 어쩌구 저쩌구 하면서 에러가 뜨던데요.. 메모리에 할당을 못해서 뜨는 에러겠죠?
: 제 컴터 메모리가 2G인데... 충분히 용량 남아있는데도 불구하고... 할당 못할때가 있더라구요...
: 이건 또 왜 그런건지요?
:
: 답변 부탁드립니다..
|