메모리 영역에 얘기하기 전, 프로그램이 어떤식으로 실행되는지 과정을 살펴 보겠습니다.
번호를 통해 프로그램의 실행 순서가 어떠한 과정으로 진행되는 지 나타내보았습니다.
프로그램이 실행되면 컴퓨터의 주 메모리(RAM)에 로드되고 일정량의 메모리 공간이 할당됩니다. 이 메모리 공간은 프로그램이 실행되는 동안 프로그램의 명령과 데이터를 저장하는 데 사용됩니다.
프로그램에 할당되는 메모리 공간의 양은 프로그램의 크기와 사용 가능한 메모리 양에 따라 달라질 수 있습니다. 예를 들어 계산기를 키는 것과, 롤을 키는 것은 프로그램의 크기가 서로 다르기 때문에 메모리 공간의 양은 이에 따라 달라집니다.
프로그램이 처음 로드될 때 운영 체제(OS)는 일반적으로 인접한 메모리 블록을 프로그램에 할당합니다. 이 메모리 블록을 "프로세스"라고 하며 코드, 데이터 및 스택 공간을 포함하여 프로그램을 실행하는 데 필요한 모든 리소스를 포함합니다.
프로그램에 할당된 메모리 공간은 일반적으로 각각 특정 목적을 가진 여러 다른 영역 또는 세그먼트로 나뉩니다. 이러한 세그먼트에는 다음이 포함될 수 있습니다.
코드 세그먼트 : 프로그램을 구성하는 명령을 저장하는 메모리 영역입니다. 종종 읽기 전용이며 프로그램이 실행되는 동안 수정할 수 없습니다. 해당 부분이 사용자가 작성한 소스 코드가 들어 가는 부분입니다. 즉, 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code)영역이라고도 부른다. 코드 세그먼트 영역은 실행 파일을 구성하는 명령어들이 올라가는 메모리 영역으로 함수, 제어문, 상수 등이 여기에 해당됩니다.
데이터 세그먼트 : 프로그램이 실행되는 동안 사용하는 데이터를 저장하는 메모리 영역입니다. 전역 변수와 static 변수, 지역 변수를 모두 포함할 수 있습니다. 이는 프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야 메모리가 소멸되는 영역
스택 세그먼트 : 프로그램이 자동으로 사용하며, 함수 호출 및 로컬 변수와 같은 임시 데이터를 저장하는 데 사용되는 메모리 영역입니다. 아울러, 함수 호출이 완료 될 경우 사라집니다. 이는 후입선출(LIFO) 스택으로 구현되며, 이는 스택에 저장된 마지막 데이터 항목이 검색되는 첫 번째 데이터 항목임을 의미합니다.
힙 세그먼트: 프로그램이 실행되는 동안 프로그래머가 동적으로 메모리 블록을 할당 및 할당 해제하는 데 사용되는 메모리 영역입니다. 프로그램 실행의 여러 지점에서 할당하고 해제해야 하는 데이터를 저장하는 데 사용됩니다. 해당 공간에 메모리를 할당하는 것을 동적 할당이라고 부르기도 합니다.
위의 Heap과 Stack 영역은 사실 같은 공간을 공유합니다. Heap이 메모리 위쪽 주소부터 할당되면 Stack은 아래쪽부터 할당되는 식이다. 그래서 각 영역이 상대 공간을 침범하는 일이 발생할 수 있는데 이를 각각 Heap Overflow, Stack Overflow라고 칭합니다.
Stack 영역이 크면 클 수록 Heap 영역이 작아지고, Heap 영역이 크면 클수록 Stack 영역이 작아집니다. 프로그램 실행이 완료되면 프로그램에 할당된 메모리 공간은 일반적으로 할당이 해제되고 다른 프로그램에서 사용할 수 있게 됩니다.
출처 :
'공부 > CS' 카테고리의 다른 글
유니코드(Unicode)란? (0) | 2023.06.05 |
---|---|
스택(Stack)영역과 힙(Heap)영역의 차이점은? (2) | 2023.03.28 |
컴퓨터 구조에서 캐시(Cache)는 왜 필요할까? (0) | 2023.03.21 |
메모리 구조의 개념 (0) | 2023.02.11 |
컴파일 시 작동 순서는 어떻게 되는가? (0) | 2022.12.26 |