Appearance
C++ 内存管理专题
一句话总览
C++ 面试「内存管理」覆盖:进程内存布局、堆与栈、malloc/free 与 new/delete、内存对齐、内存泄漏定位、以及虚拟内存。必须能讲原理,而不只是区别表。
问题清单(自测)
内存布局 / 分配
- 进程虚拟地址空间如何分布(代码段/数据段/堆/栈/共享库)?
- C++ 的内存分区(全局区、堆、栈、代码区)?
- 堆和栈的区别(生命周期、速度、大小、方向、碎片)?
new在内存哪一块分配?分配失败怎么办?- 栈上放不下用堆;栈大小限制多少(Linux ulimit 默认 8MB)?
malloc / new
malloc和new的区别?底层实现?free/delete、delete和delete[]的区别(为什么数组要多存长度)?malloc底层:brk / mmap、内存池、free list?malloc(1KB)vsmalloc(1MB)有什么区别(阈值走 mmap)?- new 的实现分几步(operator new + 构造);
placement new;new_handler。
对齐 / 内存细节
- 什么是内存对齐?为什么要对齐?对齐规则?
- 计算
sizeof(Struct)(最经典手算题)。
泄漏 / 排查
- 内存泄漏怎么检测/避免?valgrind、ASan、mtrace?
- 为什么程序崩溃 → core dump 怎么定位?(见 gdb/其它)
子文档
| 文件 | 内容 |
|---|---|
index.md | 本文件 |
layout.md | 进程/虚拟内存布局、堆栈对比 |
malloc-new.md | malloc/new/delete/free 区别与底层 |
alignment.md | 内存对齐与 sizeof 手算 |
leak.md | 泄漏检测与避免 |