[Computer Science] 프로세스 메모리 구조

양영준·2025년 4월 1일

Computer Science

목록 보기
1/5
post-thumbnail

📌메모리 구조

프로그램이 실행되는 순서

프로그램 실행 시 운영체제는 프로그램을 동작하기 위한 메모리 공간을 할당한다.
프로그램이 실행되는 동안 CPU가 코드를 처리하기 위해서는 메모리가 명령어와 데이터들을 저장하고 있어야 한다.
프로그램이 운영체제로부터 할당받는 메모리 공간은 코드 영역 (code), 데이터 영역 (data), 힙 영역 (heap), 스택 영역 (stack)으로 나뉘어져 있다.

메모리 공간

💿 코드 (Code) 영역

코드 영역은 실행할 프로그램의 코드가 저장되는 영역으로, 텍스트 (Text) 영역이라고도 불린다.
컴파일된 기계어가 저장되어 있으며, 중간에 코드를 변경할 수 없게 Read-Only로 지정되어 있다.
CPU는 해당 메모리 영역에 저장된 명령어를 하나씩 가져가서 처리한다.
코드 영역은 프로그램이 시작하고 종료될 때까지 계속 남아있는 메모리이다.

💿 데이터 (Data) 영역

데이터 영역은 전역 변수, 정적 변수, 문자열 상수 등이 할당되는 영역이다.
전역 변수나 정적 변수를 참조한 코드는 컴파일 이후 데이터 영역의 주소값을 가리키도록 변경된다.
실행 도중 전역 변수가 변경될 가능성이 있기 때문에 Read-Write로 지정되어 있다.
메인 함수 이전에 선언되어 프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야 메모리가 소멸한다.

BSSGVAR 영역을 통틀어 데이터 영역이라고 지칭한다.

  • BSS (Block Started by Symbol)
    초기화가 되지 않은 데이터를 저장하기 위한 영역
    초기화되지 않은 데이터는 값을 저장하고 있을 필요가 없기 때문에 휘발성 메모리인 RAM에 저장한다.
    BSS 영역에 변수들이 많아져도 프로그램의 실행 코드 사이즈는 늘어나지 않는다.

  • GVAR (Global VARiable)
    초기화가 된 데이터를 저장하기 위한 영역
    초기화된 데이터는 값을 저장해야하기 때문에 비휘발성 메모리인 ROM에 저장한다.

💿 스택 (Stack) 영역

프로그램이 자동으로 사용하는 임시 메모리 영역으로, 함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 영역이다.
이 때, 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임 (Stack Frame) 이라고 한다.
스택 영역의 크기는 컴파일 시에 결정된다.
함수 호출이 완료되면 스택 영역에 저장된 메모리도 해제된다.
메모리의 높은 주소부터 할당하는 후입선출 (Last In First Out) 구조를 가지고 있다.
스택 영역에서 푸시 (push) 를 통해 데이터를 저장하고, 팝 (pop) 을 통해 데이터를 인출한다.

💾 장 / 단점

  • 장점
  1. 데이터를 읽고 쓰는 것이 빠르다.
  2. 변수를 명시적으로 할당 / 해제할 필요가 없다.
  3. 하나의 명령으로 메모리 조작과 어드레스 조작이 가능하다.
  • 단점
  1. 컴파일 시에 크기가 결정되기 때문에 스택의 크기 제한이 존재한다.
  2. 변수의 크기를 조정할 수 없다.

💿 힙 (Heap) 영역

사용자에 의해 메모리 공간이 동적으로 할당되고 해제되는 메모리 영역으로, 참조형 (Reference) 데이터 타입을 갖는 객체 및 배열 등이 저장되는 영역이다.
단, 힙 영역에 있는 오브젝트들을 가리키는 레퍼런스 변수는 스택 영역에 저장된다.
응용 프로그램이 종료될 때까지 메모리가 유지되기 때문에 사용하고 난 뒤 반드시 메모리 해제가 이루어져야 한다.
메모리 해제를 하지 않는 경우 메모리 누수 (Memory Leak) 현상이 발생한다.
메모리 영역 중 유일하게 런타임 시에 크기가 결정되는 영역이다.
메모리의 낮은 주소부터 할당하는 선입선출 (First In First Out) 구조를 가지고 있다.
힙 영역에 메모리를 할당하는 것을 동적 할당 (Dynamic Memory Allocation) 이라고 부른다.

💾 장 / 단점

  • 장점
  1. 스택 영역에 비해 할당할 수 있는 메모리 공간이 많다.
  2. 프로그램에 필요한 개체의 개수나 크리를 미리 알 수 없는 경우에 사용 가능하다.
  • 단점
  1. 포인터를 통해 메모리 영여게 접근해야 하기 때문에 상대적으로 데이터를 읽고 쓰는 것이 느리다.
  2. 메모리를 사용자가 직접 관리하여야 한다. (변수의 할당 및 해제의 책임이 사용자에게 있다.)

💿 오버플로우 (Overflow)

힙 오버플로우와 스택 오버플로우

스택 영역과 힙 영역은 같은 공간을 공유하고 있다. 같은 메모리 공간을 힙 영역이 위쪽 주소부터, 스택 영역이 아래쪽 주소부터 할당하는 형식이기 때문에 각 영역이 상대 공간을 침범하는 오버플로우 (Overflow)가 발생할 수 있다.
이 때, 힙 영역이 스택 영역을 침범하는 경우를 힙 오버플로우 라고 하며, 스택 영역이 힙 영역을 침범하는 경우를 스택 오버플로우 라고 한다.


이미지 출처

모든 이미지 출처

profile
학습 내용 정리 순차적 갱신 / 정리 중

0개의 댓글