이 트랙은 “메모리 접근 패턴과 할당 정책을 설계해서 지연시간을 줄이는 영역"을 책임집니다. 핫패스에서 allocation 1회, 캐시 라인 1개가 µs 예산을 소모하는 상황을 전제로, 데이터 구조를 비용 관점으로 재구성합니다.
프로파일러가 가리키는 “느린 함수” 뒤에는 종종 할당 횟수와 접근 패턴이 숨어 있습니다. 언어 트랙(Tr.02)에서 문자열·컨테이너 사용을 다듬은 뒤에도 핫패스에 남는 비용은 어디에 붙어 할당되는지, 캐시 라인을 어떻게 소비하는지로 귀결되는 경우가 많습니다. 이 트랙은 그 지점을 데이터 구조·할당 정책·레이아웃으로 설계해 바꿉니다.
이 트랙이 책임지는 범위
- 컨테이너 선택 기준(STL 포함)과 비용 모델 수립
- allocation 제거/감소(풀/arena, 재사용, 수명 그룹화)
- 데이터 레이아웃 설계(AoS/SoA, padding, alignment)
- allocator/
std::pmr/custom allocator 적용 판단 - 캐시 친화적인 접근 패턴(순차 접근, stride, batching)
이 트랙이 다루지 않는 것 (경계)
- SIMD/hand-written asm/명령 수준 튜닝 (→ 극한 최적화 트랙)
- 분기 예측/파이프라인 같은 CPU 하드 분석 (→ CPU 트랙)
- 락 경합/false sharing 중심의 동시성 구조 (→ 동시성 트랙)
메모리·캐시 비용의 물리적 근거는 Ulrich Drepper, “What Every Programmer Should Know About Memory”에서 자세히 다룹니다. 이 문서에서 자주 반복하는 통념 하나를 미리 교정하면: “커스텀 할당자나 std::pmr을 쓰면 항상 malloc보다 빠르다"는 보장은 없습니다. 실제로는 할당 패턴(크기 분포, 재사용 빈도, 수명)이 해당 할당자의 설계 가정과 맞아떨어질 때만 이득이 나며, 가정이 어긋나면 오히려 단편화나 메모리 낭비로 손해를 볼 수 있습니다. 그래서 이 트랙의 모든 챕터는 “왜 이 전략이 이 워크로드에 맞는지"를 먼저 따지고, 적용 후에는 반드시 벤치마크로 확인하는 순서를 권장합니다.
커리큘럼
난이도 범례: 기초(입문) · 중급(실무 핵심) · 심화(깊은 분석·전문 주제) · 전문(극한·니치). Tr.NN은 optimization-NN-* 트랙을 가리킵니다. 챕터 15는 컨테이너 비용(01) 이전에 읽어도 되는 선행 개념 장입니다.
이 트랙이 처음이라면 15 → 01 → 02 → 12 → 04 → 05 순서로 읽는 것을 권장합니다. 15는 메모리·수명·캐시 라인의 직관을 먼저 맞추고, 01–04는 컨테이너·할당 정책의 실무 기반을 만들며, 05부터 레이아웃 최적화로 자연스럽게 넘어갑니다.
여기서도 표 순서는 그대로 유지합니다. 메모리 트랙은 컨테이너, 할당자, NUMA, large pages, 전역 할당자 같은 주제를 장 번호 기준으로 다시 찾기 쉬워야 하므로, 표는 참조 지도 역할을 맡고 위 추천 순서는 입문자의 이해 의존성을 맞추는 온보딩 경로로 둡니다.
Tr.02과 Tr.04의 차이도 분명히 해 두면 좋습니다. Tr.02은 vector, string, smart pointer처럼 언어와 표준 라이브러리를 어떻게 쓰느냐의 비용을 다루고, Tr.04은 그 이후에도 남는 할당 정책·수명 그룹화·레이아웃·NUMA·페이지 전략을 다룹니다.
| 챕터 | 제목 | 난이도 | 핵심 내용 |
|---|---|---|---|
| 01 | 컨테이너 비용 모델 | 기초 | STL 컨테이너 비용 모델과 선택 기준 |
| 02 | 할당 전략 | 중급 | 풀/아레나 할당, 객체 재사용 패턴 |
| 03 | 커스텀 할당자 | 심화 | 커스텀 할당자 구현 패턴 (선형, 풀, 스택) |
| 04 | std::pmr 활용 | 중급 | polymorphic_allocator 실전 활용 |
| 05 | AoS vs SoA | 중급 | 데이터 레이아웃 설계와 성능 영향 |
| 06 | 캐시 친화적 패턴 | 중급 | 순차 접근, stride, batching 전략 |
| 07 | 패딩과 정렬 | 중급 | 구조체 패딩과 정렬 최적화 |
| 08 | Large Pages | 심화 | Huge Pages / Large Pages 활용, madvise 모드 + mTHP(multi-size THP) 채택 현황(배포판·커널 버전에 따라 다름) |
| 09 | NUMA 메모리 할당 | 심화 | NUMA에서 메모리 할당·지역성 (CPU affinity는 Tr.06과 연계) |
| 10 | 메모리 단편화 | 심화 | 단편화 분석과 대응 전략 |
| 11 | 메모리 대역폭 | 심화 | 메모리 대역폭 최적화 기법, CXL 스펙 세대와 실제 배포 하드웨어 세대 사이의 시차(스펙 발표와 상용화 사이에는 통상 수년의 간격이 있음) |
| 12 | Stack vs Heap 전략 | 중급 | Stack/Heap 할당 비용 정량 분석과 선택 기준 |
| 13 | Virtual Memory 관리 | 심화 | madvise, msync 등 가상 메모리 힌트 활용, ARM MTE(Memory Tagging Extension) 하드웨어 지원 확대에 따른 오버헤드 개선 동향 |
| 14 | 메모리 누수 탐지 | 중급 | Valgrind, ASan을 활용한 누수 탐지와 성능 영향 |
| 15 | 메모리·수명·캐시 라인 직관 | 기초 | 스택/힙·수명·캐시 라인·할당이 지연에 미치는 그림 잡기 (Tr.02·Tr.05 선행 개념) |
| 16 | 전역 할당자·jemalloc·tcmalloc | 전문 | 전역 할당자 교체·튜닝과 프로파일 기반 검증 (Tr.02 문자열·컨테이너와 경계 명시) |
측정과 검증 (이 트랙 기준)
- allocation 카운트/크기/핫패스 내 위치를 수치로 확인
- 캐시/메모리 관련 지표(가능한 범위)와 레이턴시 변화를 연결
- 컨테이너/레이아웃 변경 전후 회귀를 벤치마크로 검증
- heaptrack, Valgrind massif, allocator hook,
perf stat같은 도구로 할당·캐시·페이지 변화의 원인을 함께 확인
추천 선행/병행 트랙
- 선행: Low-latency 프로파일링·성능 분석 (Tr.01)
- 병행: Low-latency C++ 언어 최적화 (Tr.02), 동시성 (Tr.07)
Phase별 학습 궤적
Phase A — 비용 모델과 할당 줄이기 (챕터 01–04, 12) 컨테이너·풀·PMR·스택/힙 선택까지 익히면, “왜 여기서 할당이 나오는지”를 코드 수준에서 제거할 수 있습니다. 이 단계를 건너뛰면 Tr.02만으로는 줄이기 어려운 반복 할당·알 수 없는 수명이 남습니다.
Phase B — 레이아웃과 캐시 (챕터 05–07) AoS/SoA·stride·패딩을 다루면 CPU 트랙(Tr.05)에서 보는 캐시 이벤트와 원인 코드를 연결하기 쉬워집니다. 건너뛰면 “캐시 미스가 난다”는 사실만 알고 데이터 배치 수정으로는 이어가기 어렵습니다.
Phase C — OS·하드웨어와 맞닿는 메모리 (챕터 08–11, 13–14) 대형 페이지, NUMA, 가상 메모리 힌트, 단편화·대역폭은 배포 환경에 따라 효과가 크게 달라집니다. Tr.06(affinity)·Tr.05(캐시)와 함께 읽을 때 재현 가능한 검증이 가능합니다.
이 트랙을 마친 후 달성할 목표
- 설명: 핫패스에서 allocation·stride·패딩·NUMA가 지연에 어떻게 기여하는지 말로 설명할 수 있다.
- 선택: 컨테이너·할당자·AoS/SoA·스택/힙을 목표 지연·팀 제약에 맞게 고를 수 있다.
- 측정: allocation 카운트·크기와 벤치마크를 연결해 변경 전후를 검증할 수 있다.
- 구분: SIMD·핸드튜닝(Tr.08)·락 경합(Tr.07)과의 경계를 짚고, 어느 트랙으로 넘길지 판단할 수 있다.
평가 기준과 이 장을 읽은 후 확인
- 이 트랙이 다루는 범위와 다루지 않는 범위(Tr.05·07·08)를 구분할 수 있는가?
- 커리큘럼 표의 난이도 열로 기본 궤적과 심화 챕터를 가늠할 수 있는가?
- Phase A→B→C 순서가 각각 막아 주는 “맹점”을 한 문장으로 말할 수 있는가?
범위와 경계
flowchart LR
subgraph inScope [이 트랙]
A["컨테이너·할당"]
B["레이아웃·캐시 패턴"]
C["OS급 메모리 힌트"]
end
subgraph outScope [경계 밖]
D["SIMD·핸드튜닝 Tr.08"]
E["CPU 하드 분석 Tr.05"]
F["락·메모리모델 Tr.07"]
end
inScope --> outScope
심화·전문가 확장 궤적
커리큘럼 표에서 심화·전문으로 표시된 챕터(예: 커스텀 할당자, NUMA, 가상 메모리 힌트)는 운영 환경·하드웨어에 강하게 의존합니다. 기본 궤적은 중급 중심으로 익힌 뒤, 프로파일과 할당 프로파일에서 병목이 확인될 때 심화 챕터로 들어가는 것을 권장합니다.
시리즈 전체 로드맵
12개 트랙의 권장 순서·심화 진입 조건은 Low-latency 최적화 시리즈 개요에서 한눈에 정리합니다.
지금 바로 이어 읽을 장
위 추천 순서(15 → 01 → 02 → 12 → 04 → 05)의 첫 세 챕터부터 이어서 읽습니다.
- 메모리·수명·캐시 라인 직관 (챕터 15)
- 컨테이너 비용 모델 (챕터 01)
- 할당 전략: 풀·아레나 (챕터 02)
![Featured image of post [Performance 04] Introduction: Low-latency 메모리·할당·레이아웃](/post/memory-optimization/getting-started-memory-allocation-data-layout-tuning/wordcloud_hu_dceb4f222beb0efc.webp)
![[Performance 04] Introduction: Low-latency 메모리·할당·레이아웃](/post/memory-optimization/getting-started-memory-allocation-data-layout-tuning/wordcloud_hu_4b3d1ede294a01c.webp)
![[Memory 04] 컨테이너 비용 모델](/post/memory-optimization/container-cost-model-selection/wordcloud_hu_e8b79d88d2cc0b07.webp)
![[Memory 04] 할당 전략: 풀·아레나](/post/memory-optimization/pool-arena-allocation-strategy/wordcloud_hu_ce0a2aa56697626e.webp)
![[Memory 04] 커스텀 할당자 구현 패턴](/post/memory-optimization/custom-allocator-patterns/wordcloud_hu_6b8e68ff470c4705.webp)
![[Memory 04] std::pmr 실전 활용](/post/memory-optimization/pmr-polymorphic-allocator-practical/wordcloud_hu_a0ce800b7b8941d9.webp)
![[Performance 06] Introduction: OS·런타임 Low-latency 운영환경](/post/os-optimization/getting-started-os-runtime-performance-tuning/wordcloud_hu_a9d684b10c323753.webp)
![[Performance 09] Introduction: Low-latency I/O 최적화](/post/io-optimization/getting-started-io-performance-tuning/wordcloud_hu_1d0760437bd7445c.webp)
![[Performance 10] Introduction: Low-latency 네트워크 최적화](/post/network-optimization/getting-started-network-performance-tuning/wordcloud_hu_f4ddaf91fb13038a.webp)
![[Optimization(Series)] Introduction: Low-latency 최적화 12트랙 로드맵](/post/low-latency-optimization-series/getting-started-low-latency-optimization-series-overview/wordcloud_hu_8a1f40e0771bebe4.webp)
![[Performance 07] Introduction: Low-latency 동시성·멀티스레드](/post/concurrency-optimization/getting-started-concurrency-multithreading-performance-tuning/wordcloud_hu_af151f19d558a3a1.webp)