2016/01/30 코드 그라운드 문제 풀 때 메모리 제한
코드 그라운드 문제에서 보면 메모리 제한이 다음과 같이 있다.
-메모리 사용 제한 : heap, global, static 총계 256MB, stack 1MB
프로그램을 실행하면 운영체제는 프로그램을 위한 메모리 공간을 할당해준다.
이 메모리 공간은 stack, heap, data 영역으로 나뉜다.
1. data 영역에는 global(전역변수), static 변수가 들어간다. 프로그램 시작하자마자 크기에 맞는 영역이 할당되고, 프로그램이 종료되어야 메모리에서 해제된다.
2. stack 영역은 함수 호출시에 할당되서 함수에 대한 지역변수와 매개변수가 저장된다. 함수 호출이 끝나면 메모리에서 해제된다.
크기는 컴파일 타임에 결정된다.
3. heap 영역은 프로그래머에 의해 할당되며 크기는 런타임에 결정된다. 할당해야 할 메모리의 크기를 런타임에 결정해야하는 때 사용되는 공간이다. 이렇게 할당하는 것을 동적할당이라고 한다.
-메모리 사용 제한 : heap, global, static 총계 256MB, stack 1MB
프로그램을 실행하면 운영체제는 프로그램을 위한 메모리 공간을 할당해준다.
이 메모리 공간은 stack, heap, data 영역으로 나뉜다.
1. data 영역에는 global(전역변수), static 변수가 들어간다. 프로그램 시작하자마자 크기에 맞는 영역이 할당되고, 프로그램이 종료되어야 메모리에서 해제된다.
2. stack 영역은 함수 호출시에 할당되서 함수에 대한 지역변수와 매개변수가 저장된다. 함수 호출이 끝나면 메모리에서 해제된다.
크기는 컴파일 타임에 결정된다.
3. heap 영역은 프로그래머에 의해 할당되며 크기는 런타임에 결정된다. 할당해야 할 메모리의 크기를 런타임에 결정해야하는 때 사용되는 공간이다. 이렇게 할당하는 것을 동적할당이라고 한다.
다시 본론으로 돌아와, 만약 문제를 풀 때 int형 배열이 필요하다고 하자.
main 함수에서 int 배열을 호출할 경우 stack 메모리에 배열이 할당된다. 그럼 1MB 제한에서는 얼마나 큰 배열을 선언할 수 있을까?
1MB=1048576Byte int는 4Byte이므로 262144개의 int를 선언할 수 있다.
보통 문제에서 백 만개가 넘는 배열을 선언해야 할 경우가 많기 때문에 왠만하면 동적할당, 혹은 전역변수로 선언해야 메모리 제한으로 0점 맞는 것을 해결할 수 있다.
댓글
댓글 쓰기