joseph415   5년 전

배열 선언할때 

int a[5000000];

은 안되고 

bool a[5000000];

char a[5000000];

은 되는 이유가 스텍 크기 가 정해져있어서 그런건가요?

0_o   5년 전

C나 C++의 경우 크기가 약 1억이하인 int 배열은 전역으로 선언하면 정상적으로 작동합니다. 

int 자료형은 4바이트인 반면 bool이나 char 자료형은 1바이트입니다.

크기가 약 4억정도되는 bool 형 배열이나 char형 배열을 전역으로 선언하실 수 있습니다.

joseph415   5년 전

@0_o 

main 함수 안에다 넣었을때 안되는 이유가 뭔가요?

0_o   5년 전

메모리의 구조는 크게 스택 에리어, 힙 에리어, 데이터 에리어로 나뉘는데,

먼저 스택 에리어는 함수의 호출, 지역변수, 매개변수가 할당되는 지역입니다.

함수가 끝나면 지역변수와 매개변수는 스택 에리어에서 지워집니다.

스택 영역은 한계가 있어 한계를 초과하도록 삽입할 수 없습니다, 또한 프로그램이 사용하는 임시 메모리이기 때문에 할량할수 있는 양이 작습니다.

흔히 말하는 스택 오버플로우는 이 스택 영역 안에서 과도한 메모리 할당으로 스택 영역이 터져버리는 현상을 말하는 것입니다.

데이터 에리어는 전역 변수나 static 변수가 할당되는 영역입니다.

전역 변수는 main 함수가 호출되기 전에 데이터 영역에서 메모리를 할당합니다.

힙 영역은 사용자가 직접 할당할 수 있는 영역입니다.

malloc, calloc, realloc 등을 이용해서 메모리 동적 할당이 가능합니다.

따라서 힙 에리어, 데이터 에리어에 메모리를 할당(전역 변수나 동적 메모리 활용)하면 배열의 크기를 더 크게 만들 수 있습니다.

joseph415   5년 전

@0_o 감사합니다 이해 되었습니다.

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