프로세스 메모리 구조 모델

Raccoon·2025년 7월 17일

프로세스 메모리 구조 모델

스택 영역

스택 영역은 함수 호출시 사용되는 메모리 공간으로, 함수 호출과 관련된 지역변수매개변수 리턴 주소
함수 호출 컨텍스트 가 저장된다.

스택은 프로세스 시작 시 운영체제가 고정된 크기로 한 번 할당한다. 따라서, 스택 크기는 고정되어 있고, 런타임에 변경할 수없
다.

운영체제가 프로세스 시작 시 정해진 크기(예: 1MB, 8MB 등)를 할당하고, 너무 많은 재귀 호출이나 큰 지역 변수 배열을 선언하
게 되면 Stack Overflow 가 발생하게 된다.

힙 영역

힙 영역은 프로그래머가 명시적으로 동적 메모리를 할당하는 공간으로, 주로 new, malloc 등과 같은 명령어를 통해 런타임중
에 메모리를 할당하고 해제한다.

이 영역은 크기가 고정되어 있지 않고, 프로세스가 사용할 수 있는 가용 메모리 공간 내에서 유동적으로 확장된다.

C / C++ 에서의 힙 메모리는 힙 메모리는 개발자가 직접 할당하고 해제해야 하며, 메모리 해제를 누락할 경우 메모리 누수
(Memory Leak)가 발생할 수 있다.

반면, 가비지 컬렉터(GC)가 있는 Java, JavaScript, Python 등 은 개발자가 직접 메모리를 해제하지 않아도, 사용하지않
는 객체를 자동으로 감지하여 메모리를 해제해준다.

힙은 스택과 반대 방향(낮은 주소 → 높은 주소)으로 메모리를 확장하며, 스택과 힙이 서로 침범하지 않도록 주의해야 한다.

동적배열, 객체, 콜백 등과 같이 크기가 유동적이고 생명 주기가 함수 호출보다 긴 데이터들을 저장하는 데 적합하다.

Data 영역(BSS, GVAR)

프로그램이 실행될 때 생성되고 프로그램이 종료되면 시스템에 반환되며, 전역변수, 정적변수, 배열, 구조체 등이 저장된다.

BSS 영역(Block Started by Symbol)은 초기화되지 않은 전역 변수와 정적 변수가 저장되는 공간이다.. 메모리 시작 시 0으로초
기화된 상태로 할당된다.

GVAR(Global Variable) 영역은 보통 전역 변수를 의미하는 용어로, 초기화된 전역 변수들이 저장되는 데이터(Data) 영역과 초
기화되지 않은 전역 변수들이 저장되는 BSS 영역 둘 다를 포함하는 더 넓은 개념이다.

결론적으로 GVAR 영역 = 데이터 영역(초기화된 전역 변수) + BSS 영역 이고, GVAR 영역 안에 BSS 영역이 포함되어 있는
것이다.

두 영역 모두 실행 시점에 RAM에 할당되어 프로그램이 동작하는 동안 사용된다.

TEXT 영역

프로그램이 실행될 때 생성되고, 프로그램이 종료되면 시스템에 반환되는 메모리 영역으로, 실행할 코드(명령어)가저장되는
공간이다.

TEXT 영역에는 컴파일된 기계어 코드가 위치하며, 보통 읽기 전용으로 설정되어 코드가 실행 중에 변경되지 않는다. 이 영역은함
수, 루프, 조건문 등 프로그램 로직을 수행하는 명령어들이 포함되어 있다.

TEXT 영역은 실행 파일에서 고정된 크기로 할당되며, 프로세스가 시작될 때 메모리에 적재된다.

스택 영역과 하는 일이 비슷해보이지만 다르다.

TEXT 영역은 프로그램이 무엇을 할 것인가에 대한 명령어(코드)를 저장하는 영역이라면,

STACK 영역은 현재 무엇을 하고 있는가에 관한 정보를 저장하는 영역이다.

JVM(Java Virtual Machine) 은 실행 코드를 직접 메모리에 기계어 형태로 저장하지 않고, 바이트코드 형태로 관리하며, 별도의
코드 영역(Code Area)에서 실행을 관리합니다.

Node.js, 브라우저(JavaScript 엔진) 등 자바스크립트 런타임 역시 전통적인 TEXT 영역 대신, 함수 객체와 스크립트 코드 등을위
한 별도의 코드 영역을 사용합니다.

profile
꾸준함을 목표로 합니다.

0개의 댓글