2015136077   3년 전

과제로 인해 float값을 1024*1024*1024개를 할당해야 합니다. 비쥬얼스튜디오를 사용하구요. 이 부분은 알고리즘이나 다른 부분을 사용하여 할당량을 줄일수는 없습니다.

이로 인해 malloc으로 값을 동적할당했고, heap구조 추가 할당을 위해 시스템의 힙 예약 크기를 1024*1024*1024에 float가 8바이트를 가진다 가정해 8기가를 할당했고 여유분으로 10기가를 할당했습니다. 추가적으로 작업관리자를 통해 11기가 까지 사용가능한것으로 확인되었구요. 

하지만

예외 발생(0x00292030, Lab3.exe): 0xC0000005: 0x012F0000 위치를 기록하는 동안 액세스 위반이 발생했습니다..

라는 오류와 함께 불가능합니다.

코드는 아래와 같습니다. 어디가 문제일까요. 

julysky   3년 전

malloc 함수의 원형은

void* malloc(size_t size);

이고 size_t 는 typedef unsigend int size_t;로 type definition 되어있습니다.

따라서 size값이 2^32-1 보다 작거나 같아야하는데,

주어진 코드에서 sizeof(float)*max는 sizeof(float)를 4로 계산한다 하더라도 2^32이라서 overflow가 일어날것입니다.

2015136077   3년 전

ㅠㅜ 그러면 저 많은수를 할당할 자료구조를 멀로해야할까요

lim551   3년 전

2^32를 메모리는 한 번에 동적 할당할 수 없으니 포인터의 배열로 이중으로 만들 수 밖에 없겠네요.

댓글을 작성하려면 로그인해야 합니다.