C나 C++의 경우 크기가 약 1억이하인 int 배열은 전역으로 선언하면 정상적으로 작동합니다.
int 자료형은 4바이트인 반면 bool이나 char 자료형은 1바이트입니다.
크기가 약 4억정도되는 bool 형 배열이나 char형 배열을 전역으로 선언하실 수 있습니다.
메모리의 구조는 크게 스택 에리어, 힙 에리어, 데이터 에리어로 나뉘는데,
먼저 스택 에리어는 함수의 호출, 지역변수, 매개변수가 할당되는 지역입니다.
함수가 끝나면 지역변수와 매개변수는 스택 에리어에서 지워집니다.
스택 영역은 한계가 있어 한계를 초과하도록 삽입할 수 없습니다, 또한 프로그램이 사용하는 임시 메모리이기 때문에 할량할수 있는 양이 작습니다.
흔히 말하는 스택 오버플로우는 이 스택 영역 안에서 과도한 메모리 할당으로 스택 영역이 터져버리는 현상을 말하는 것입니다.
데이터 에리어는 전역 변수나 static 변수가 할당되는 영역입니다.
전역 변수는 main 함수가 호출되기 전에 데이터 영역에서 메모리를 할당합니다.
힙 영역은 사용자가 직접 할당할 수 있는 영역입니다.
malloc, calloc, realloc 등을 이용해서 메모리 동적 할당이 가능합니다.
따라서 힙 에리어, 데이터 에리어에 메모리를 할당(전역 변수나 동적 메모리 활용)하면 배열의 크기를 더 크게 만들 수 있습니다.
댓글을 작성하려면 로그인해야 합니다.
joseph415 5년 전 1
배열 선언할때
int a[5000000];
은 안되고
bool a[5000000];
char a[5000000];
은 되는 이유가 스텍 크기 가 정해져있어서 그런건가요?