[CSAPP 9장 완전 정복] 9.9(Part 7) 블록 배치(Placement) 정책의 종류와 장단점
·
크래프톤 정글/컴퓨터구조(CSAPP)
블록 배치(Placement) 정책의 종류와 장단점이번 포스트에서는 메모리를 할당할 때 어떤 블록을 선택할지 결정하는 배치 정책(Placement Policy)에 대해 알아보겠습니다. 배치 정책에는 다양한 규칙들이 있는데요. 어떤 배치 방법을 선택하는지에 따라 메모리 활용률과 프로그램 성능이 크게 달라질 수 있습니다. 배치 정책(Placement Policy)이란?배치 정책(Placement Policy)은 malloc 요청이 들어왔을 때, 어떤 free block에 메모리를 배치할지를 결정하는 규칙을 말합니다. 좋은 정책을 선택하게 되면 단편화를 줄이고 성능을 향상시킬 수 있습니다. 주요 Placement 정책들First-Fit (최초 적합)Free List의 처음부터 탐색하여, 요청 크기 이상인 ..
[CSAPP 9장 완전 정복] 9.9(Part 6) 메모리 단편화(Fragmentation)와 대응 전략
·
크래프톤 정글/컴퓨터구조(CSAPP)
메모리 단편화(Fragmentation)와 대응 전략이번 포스트에서는 동적 메모리 할당에서 피할 수 없는 문제인 단편화(Fragmentation)를 다룹니다. 단편화가 발생하는 이유, 종류, 그리고 이를 최소화하기 위한 다양한 기법까지 함께 살펴보겠습니다. 단편화(Fragmentation)란?단편화는 메모리 공간이 충분히 있음에도 불구하고, 메모리 할당 요청을 만족시키지 못하는 상황을 의미하는데요. 이는 크게 두 가지로 나눌 수 있습니다.내부 단편화 (Internal Fragmentation)할당된 블록 내부에 사용되지 않고 낭비되는 공간외부 단편화 (External Fragmentation)메모리 전체적으로는 여유가 있지만, 연속된 충분한 크기의 공간이 없는 경우 내부 단편화(Internal Frag..
[CSAPP 9장 완전 정복] 9.9(Part 5) malloc과 free의 동작 원리와 구현 흐름
·
크래프톤 정글/컴퓨터구조(CSAPP)
malloc과 free의 동작 원리와 구현 흐름이번 포스트에서는 동적 메모리 할당의 핵심 함수인 malloc과 free의 내부 동작 방식을 구체적으로 살펴봅니다. 단순히 메모리를 '할당'하고 '해제'한다는 수준을 넘어서, 실제로 어떤 로직을 통해 메모리를 관리하는지 이해해보는 시간을 가져보려고 합니다. malloc() 함수의 동작 흐름malloc(size)는 사용자가 요청한 크기만큼 메모리를 할당해주는 함수인데요. 사용자에게 있어서는 간단한 호출이지만 내부에서는 여러 추가 작업이 일어나게 됩니다.요청 크기 조정헤더와 패딩을 포함해 정렬 단위(보통 8B 또는 16B)에 맞춰 크기 조정최소 블록 크기(예: 16B 또는 24B) 이상 확보적절한 free block 탐색Free List에서 요청 크기 이상의 ..
[CSAPP 9장 완전 정복] 9.9(Part 4) Boundary Tag와 블록 병합(Coalescing) 기법
·
크래프톤 정글/컴퓨터구조(CSAPP)
Boundary Tag와 블록 병합(Coalescing) 기법이번 포스트에서는 동적 메모리 할당기에서 매우 중요한 개념인 Boundary Tag와, 이를 활용한 블록 병합(coalescing) 기법에 대해 자세히 살펴보겠습니다. 이 기법은 메모리 단편화를 줄이고, 큰 메모리 요청을 효율적으로 처리하기 위해 꼭 필요한 기술이라고 할 수 있습니다. Boundary Tag란 무엇인가?Boundary Tag는 블록의 앞과 뒤에 크기 및 상태 정보를 저장하는 기법입니다. 즉, 블록의 시작 부분에 Header를, 끝 부분에 Footer를 두어 다음과 같은 정보를 기록합니다.블록 크기할당 여부(allocated/free)이 구조를 통해 블록 양쪽 이웃의 상태를 빠르게 파악할 수 있어, O(1) 시간에 이웃한 Fre..
[CSAPP 9장 완전 정복] 9.9(Part 3) 암시적 가용 리스트(Implicit Free List) vs 명시적 가용 리스트(Explicit Free List)
·
크래프톤 정글/컴퓨터구조(CSAPP)
암시적 가용 리스트(Implicit Free List) vs 명시적 가용 리스트(Explicit Free List)이번 포스트에서는 동적 메모리 할당의 핵심 관리 기법 중 하나인 Free List에 대해 다뤄볼 예정인데요. 특히, 암시적 가용 리스트(Implicit Free List)와 명시적 가용 리스트(Explicit Free List)의 차이점을 중심으로, 각 방식의 장단점과 활용 전략을 알아보겠습니다. 암시적 가용 리스트(Implicit Free List)란?암시적 가용 리스트는 말 그대로, 모든 힙 블록을 순차적으로 탐색하는 방식인데요. 별도의 포인터 없이, 각 블록의 헤더를 읽으며 할당 여부를 판단합니다.모든 블록을 선형 탐색할당/해제 여부는 블록의 Header/Footer 정보만으로 확인탐..
[CSAPP 9장 완전 정복] 9.9(Part 2) Heap 블록 구조와 메모리 관리 기초
·
크래프톤 정글/컴퓨터구조(CSAPP)
Heap 블록 구조와 메모리 관리 기초이번 포스트에서는 Heap 블록이 실제로 어떻게 구성되어 있는지와, 이를 효율적으로 관리하기 위한 블록 배치와 블록 분할/병합 기법은 무엇인지 함께 살펴보겠습니다. 동적 메모리 관리는 단순한 할당과 해제를 넘어서, 메모리 조각화(fragmentation)를 최소화하기 위한 세심한 전략이 필요합니다. Heap 블록의 기본 구조Heap에 할당되는 각 블록은 단순히 사용자 데이터(payload)만 담고 있지 않은데요. 블록마다 자체 정보를 담은 Header와 때로는 Footer가 추가로 존재합니다.Header: 블록 크기와 할당 여부(allocated/free)를 저장Payload: 실제 사용자 데이터가 저장되는 영역Padding: 메모리 정렬(주로 8바이트 또는 16바..
[CSAPP 9장 완전 정복] 9.9(Part 1) 동적 메모리 할당이란 무엇이며 왜 필요할까?
·
크래프톤 정글/컴퓨터구조(CSAPP)
동적 메모리 할당이란 무엇이며 왜 필요할까?이번 포스트에서는 동적 메모리 할당이란 무엇인지, 왜 필요한지, 그리고 기본적인 heap 구조까지 다루어보겠습니다. 동적 할당은 프로그램이 실행 중에 메모리를 요청하고 해제하는 과정을 다루는 중요한 개념인데요. 이 개념을 이해하면 메모리 관리와 시스템 프로그래밍의 기초를 탄탄히 다질 수 있습니다. 동적 메모리 할당(Dynamic Memory Allocation)이란?동적 메모리 할당은 프로그램 실행 중(runtime) 필요한 만큼 메모리를 확보하는 방식인데요. 이는 프로그램이 시작될 때 고정된 메모리만 사용하는 정적(static) 또는 전역(global) 메모리 할당과 대비됩니다.필요한 시점에 필요한 크기만큼 메모리 요청 가능주로 heap 영역에 메모리 공간이..
[CSAPP 9장 완전 정복] 9.9 rawdata 공유 (전체 학습 목표, 학습 정리 자료)
·
크래프톤 정글/컴퓨터구조(CSAPP)
9.9절 rawdata 공유 (전체 학습 목표, 학습 정리 자료)이번에 CSAPP 9.9절을 공부하면서 총 15개의 학습 목표를 세우고, 그에 따라 처음부터 체계적으로 학습을 진행했는데요. 이 학습 목표들을 바탕으로 각 목표마다 주어진 핵심 개념과 관련된 세부 내용들을 공부하면서 정리해 보았습니다. 이 글에서는 블로그에 올릴 요약본을 작성하기에 앞서, 우선적으로 전체 학습 목표들과 그에 대한 세부 학습 내용을 묶은 ‘학습 정리 자료’를 공유하려고 합니다. 이후 이 자료를 기반으로 핵심만 뽑아 정리한 요약 포스트를 따로 작성할 예정입니다. CSAPP 9.9 전체 학습 목표 (총 15개)CSAPP 9.9 학습 정리 자료