Skip to content

C++ 内存管理专题

一句话总览

C++ 面试「内存管理」覆盖:进程内存布局、堆与栈、malloc/freenew/delete、内存对齐、内存泄漏定位、以及虚拟内存。必须能讲原理,而不只是区别表

问题清单(自测)

内存布局 / 分配

  1. 进程虚拟地址空间如何分布(代码段/数据段/堆/栈/共享库)?
  2. C++ 的内存分区(全局区、堆、栈、代码区)?
  3. 堆和栈的区别(生命周期、速度、大小、方向、碎片)?
  4. new 在内存哪一块分配?分配失败怎么办?
  5. 栈上放不下用堆;栈大小限制多少(Linux ulimit 默认 8MB)?

malloc / new

  1. mallocnew 的区别?底层实现?
  2. free/deletedeletedelete[] 的区别(为什么数组要多存长度)?
  3. malloc 底层:brk / mmap、内存池、free list?
  4. malloc(1KB) vs malloc(1MB) 有什么区别(阈值走 mmap)?
  5. new 的实现分几步(operator new + 构造);placement newnew_handler

对齐 / 内存细节

  1. 什么是内存对齐?为什么要对齐?对齐规则?
  2. 计算 sizeof(Struct)(最经典手算题)。

泄漏 / 排查

  1. 内存泄漏怎么检测/避免?valgrind、ASan、mtrace?
  2. 为什么程序崩溃 → core dump 怎么定位?(见 gdb/其它)

子文档

文件内容
index.md本文件
layout.md进程/虚拟内存布局、堆栈对比
malloc-new.mdmalloc/new/delete/free 区别与底层
alignment.md内存对齐与 sizeof 手算
leak.md泄漏检测与避免

C++ 面试八股 · VitePress 版