Memory area

메모리 영역

컴퓨터 프로그램이 실행될 때, 메모리는 여러 영역으로 나누어져 특정 목적에 따라 사용됩니다. 이러한 메모리 영역은 다음과 같이 구분됩니다.

  1. 코드 영역 (Code or Text Segment):

    • 프로그램의 명령어 코드가 저장되는 영역입니다.

    • CPU는 이 영역에 있는 명령어들을 하나씩 순서대로 실행합니다.

    • 이 영역은 읽기 전용으로 설정되어, 프로그램 실행 도중 코드가 변경되지 않도록 합니다.

  2. 데이터 영역 (Data Segment):

    • 프로그램에서 선언된 전역 변수와 정적 변수가 저장되는 영역입니다.

    • 초기화된 데이터 영역과 초기화되지 않은 데이터 영역으로 나뉘어져 있을 수 있습니다.

    • 프로그램 시작 시 메모리에 할당되고, 프로그램 종료 시 메모리에서 해제됩니다.

  3. 힙 영역 (Heap Segment):

    • 동적 메모리 할당이 이루어지는 영역입니다.

    • 프로그램 실행 중에 필요에 따라 메모리를 동적으로 할당하거나 해제할 때 사용됩니다.

    • C언어에서는 malloc, free 등의 함수로, C++에서는 **new**와 **delete**로 관리됩니다.

    • 힙 영역은 주로 큰 데이터 구조체나, 프로그램 실행 중(런타임)에 크기가 결정되는 데이터를 저장하기 위해 사용됩니다.

  4. 스택 영역 (Stack Segment):

    • 함수의 호출 정보(호출된 함수의 주소, 매개변수, 지역 변수, 반환 주소 등)가 저장되는 영역입니다.

    • 함수가 호출될 때마다 해당 함수의 정보가 스택에 푸시되고, 함수가 종료되면 팝되어 정보가 제거됩니다.

    • 컴파일 타임에 영역의 크기가 결정됩니다.

    • 스택은 후입선출(LIFO, Last-In First-Out) 구조를 가지며, **push**와 pop 연산으로 데이터를 관리합니다.

힙 영역과 스택 영역은 사실 같은 공간을 공유한다. 힙이 메모리 위쪽 주소부터 할당되면 스택은 아래쪽부터 할당되는 식이다. 그래서 각 영역이 상대 공간을 침범하는 일이 발생할 수 있는데 이를 각각 힙 오버플로우, 스택 오버플로우라 한다.

Last updated