프로그램이 실행되면 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 |
---|