基本数据结构
四个"看起来谁都会"的家伙。但实际上,它们是你 90% 工程性能问题的胜负手。
warning
别把"基本"当成"浅"。动态数组的扩容为什么是 2 倍、map 的渐进 mortality、为什么年度旗舰 Go 比 std::vector 慢十倍、为什么 std::list 几乎从大型项目绝迹——这些问题的答案都需要把"CPU 形态 + 运行时内存模型 + 算法复杂度"三层同时拉起来。
这一节的目标
四个章节走完,你应当具备:
- 一段代码看一眼能说出"这步在硬件上是 L1 / L2 / L3 / DRAM 哪一档";
- 一道需求拿到手能给出"用 vector 还是 list,为什么",不再凭语感;
- 会设计一个针对 cache line 大小的字节紧排结构,理解 padding 抢哪几个字节;
- 会查 defrag 在 STL/Java/CPython 里为什么不自动做的来由。