4 November 2024

Stack과 Heap의 메모리적 관점

by 꽈배기

image

1. 메모리 관리 영역과 포함 요소

메모리 관리는 일반적으로 다음과 같은 영역으로 나뉩니다:

2. 힙과 스택의 차이점

메모리 풀 (Memory Pool) 메모리 풀은 미리 정의된 크기의 메모리 블록을 여러 개 준비해두고, 필요할 때마다 이 블록을 할당하는 방법으로. 주로 고정 크기의 메모리 할당이 빈번한 경우에 사용됩니다. 멀티스레드 환경에서 힙에 요청하는 경우 매우 무거운 작업이 될 수 있기에 메모리 풀을 사용하기도 함.

용도에 따라 고정된 크기공간을 메모리풀로 사용할 수 도 있으며, 메모리 풀의 크기가 동적으로 바뀌는 경우도 존재한다.

내부 단편화를 줄일 수 있으며, 메모리 할당과 해제 속도가 빨라집니다.

메모리 풀 단점

장단점 비교

방법 외부 단편화 해결 내부 단편화 해결 메모리 관리 오버헤드 유연성
페이징 완전 해결 부분 해결 높음 높음
세그멘테이션 부분 해결 부분 해결 중간 높음
메모리 풀 부분 해결 거의 해결 낮음 낮음

3. 힙과 스택의 속도 차이가 나는 이유 (메모리 접근의 차이점)

CPU가 프로세스를 실행할 때, 가상 주소를 물리 주소로 변환하기 위해 페이지 테이블을 사용합니다. 힙과 스택은 메모리 할당 방식과 접근 방식에서 차이가 있습니다.

4. 멀티태스크 환경에서 스레드 간 스택 자료구조만 따로 존재하는 이유

멀티태스크 환경에서 각 스레드는 독립적인 실행 흐름을 가지며, 각 스레드는 자신의 스택을 가지고 있습니다. 이는 다음과 같은 이유 때문입니다:

멀티스레드 환경에서 컨텍스트 스위칭 시 PCB에 저장되는 요소들:

프로세스 제어 블록(PCB, Process Control Block)은 프로세스의 상태를 저장하는 데이터 구조입니다.

tags: ComputerScience