본문 바로가기

Programming

메모리의 구조 Code, Data, Heap, Stack

프로그램이 실행되면 OS는 메모리에 프로그램이 돌아갈수있는 공간을 할당해주게됩니다

할당되어지는 공간은 Code,Data,Heap,Stack 이렇게 총 4가지 공간으로 나뉘어지게됩니다

Code 영역

프로세스가 실행할 코드와 매크로 상수가 컴파일 타임에 기계어의 형태로 저장되는 공간입니다 텍스트 영역이라고 부리기도합니다 프로그램이 시작하고 종료될때까지 메모리에 남아있습니다

Data영역

전역변수, static 변수, 배열, 구조체등이 저장되는 영역입니다 이영역또한 프로그램이 시작하고 종료될때까지 메모리에 남아있습니다

Stack 영역

함수의 호출과 관려있는 영역입니다 지역변수와 매개변수, 리턴값과같은 임시 메모리를 관리하는 영역입니다

우리가 흔히 알고있는 스택오버플로우 오류는 이 스택영역이 힙영역을 침범할때 발생하는 오류입니다

스택영역은 컴파일 시에 크기가 결정됩니다 visual studio컴파일러설정에서 크기를 우리가 임의로 변경이 가능하며 간혹 알고리즘문제들을 풀때 이영역이 너무낮게 설정되어있는 경우가있는데 해당영역을 늘려주면 스택오버플로우 오류가 발생하지않고 문제를 풀수있는 경우들이있습니다

Heap 영역

힙영역은 프로그래머가 메모리를 좀더 효율적으로 관리해주기위해 만들어진 영역입니다

사용자가 동적으로 메모리 영역을 할당하고 해제하여 사용하는 영역입니다

힙영역은 프로그램이 돌아가는 런타임에 크기가 결정됩니다

Overflow

Stack 영역과 Heap 영역은 밀접하게 연관되어있습니다

두영역은 메모리영역을 나눠쓰는 관계이며 Stack 영역이 클 수록 Heap 영역이 작아지고,Stack영역이 커질수록 Heap영역이 작아집니다

힙은위쪽 stack은 아래쪽의 메모리 영역부터 사용하고 둘은 붙어있기때문에 오버플로우가 발생시 서로의 영역을 침범하게 됩니다

Stack Overflow

Stack 영역이 Heap 영역을 침범할경우 발생하는 오류입니다

Heap Overflow

Heap 영역이 Stack 영역을 침범할경우 발생하는 오류입니다

'Programming' 카테고리의 다른 글

리터럴(literal)과 상수(constant)  (0) 2021.11.22