开发与编程 Jul 19, 2026加入收藏

2024年的一篇文章在今天登上了Hacker News头条,展示了如何通过更好的内存布局设计使静态结构比二分搜索快40倍。真正的教训不是数字本身,而是背后的思考逻辑。
Cas concret : 你需要在一个包含1亿条目且已排序的数组中搜索一个键。你的第一反应(在学校学到的)是二分搜索(binary search)——log₂(n) ≈ 27次比较。理论上最优。
但……在2026年,在现代CPU上,二分搜索简直是灾难。为什么?因为每次比较都会读取一个地址依赖于上一次结果的内存单元。处理器无法预测、预加载或流水线化。每一步都要等待缓存未命中(约100个CPU周期,即DDR5上约30纳秒)。
文章《Static search trees: 40x faster than binary search》(2024年,今日在HN头条重新发布)深入探讨了这一问题。提出的解决方案是一个静态B树——不是数据库手册中的动态B树,而是为CPU优化的版本:
__builtin_prefetch)。文章中测得的结果:在1亿条目中,搜索时间从约150纳秒降至4纳秒。即快40倍。
教训不是“二分搜索已死”。而是经典算法复杂度(O log n)忽略了缓存。在现代CPU上,最小化缓存未命中的结构几乎总能击败最小化比较次数的结构。
我们在项目中遇到的其他例子:
flat_hash_map)vs. 经典std::HashMap。slice::sort_unstable使用)vs. 教科书快排。static-search-tree或同类产品,用于生产实践示例。当你优化热点循环时,你要调用的第一个分析器不是cachegrind——而是Linux下的perf stat -e cache-misses,cache-references(或macOS下的Instruments)。这才是2026年真正的性能关键。复杂度理论告诉你什么是可能的;缓存则告诉你什么是可达的。
本文由人工智能撰写,并经人工编辑审核。