深入二进制系列:C++ 全局优化技术简史
编译器的 -O2 / -O3 已经很努力了,但它有两个天生的盲区:看不远(优化卡在单个翻译单元的边界上)、看不到未来(不知道程序真正跑起来是什么样)。这篇文章把 PGO、LTO/ThinLTO、AutoFDO、LLVM-BOLT 串成一条线——它们其实都在干同一件事:一步步把优化器的视野放大,直到放大到「已经链接成型的二进制」本身。 最近给 blade 构建系统补三平台支持时,我把...
编译器的 -O2 / -O3 已经很努力了,但它有两个天生的盲区:看不远(优化卡在单个翻译单元的边界上)、看不到未来(不知道程序真正跑起来是什么样)。这篇文章把 PGO、LTO/ThinLTO、AutoFDO、LLVM-BOLT 串成一条线——它们其实都在干同一件事:一步步把优化器的视野放大,直到放大到「已经链接成型的二进制」本身。 最近给 blade 构建系统补三平台支持时,我把...
一台 Apple Silicon 的 MacBook Pro,怎么同时当 Linux 和 Windows 的开发测试机?Linux 用 OrbStack 跑容器和虚拟机,Windows 用 VMware Fusion / UTM 装 ARM 版虚拟机、配 Visual Studio 2022 + 2026 Build Tools(含 ARM 编译器)和 OpenSSH Server。把...
一个 Windows 程序编译成 PE,Linux 的库编译成 ELF——两种格式天差地别,本来连放进同一个可执行文件都做不到。可 Wine 跑起来后,Windows 程序里一句 CreateFile + ReadFile,最终却落到了 ELF 里的 open()、read()。这中间到底经过了什么?拆开来看,背后藏着三种不同的”跨界”机制:进程内的 NT 系统调用门、进程内的 uni...
一个叫 Perry 的项目:把 TypeScript 直接 AOT 编成原生二进制,性能贴着 Rust / C++。但比技术更让我吃惊的,是这 88 万行代码——一个人借助 AI,在四个半月里写了出来。从 NaN-Boxing、隐藏类到自研 GC,再到一点关于「AI 正在改写软件开发方式」的感想。 我有个习惯:平时爱逛 GitHub,刷到觉得有意思的项目就顺手 star 一下。可说...
「只是多写个 dllimport」的差异,在工程上怎么一步步变成构建系统的麻烦?从头文件三态、/EXPORT 烤进 .obj 逼出双编译,到 .def / COMDAT 过滤 / export_map,再到导入库与 Borland / MinGW 的不同处理。是上一篇《符号导出三国志》的工程续篇。 上一篇《符号导出三国志》讲清了底层机制:Windows 把「间接寻址」做成 opt-...
写跨平台 C/C++ 库的人,大概都被 Windows 的 __declspec(dllimport) / dllexport 折磨过,换到 Linux / macOS 却什么都不用写。本文把 PE / ELF / Mach-O 三家「动态库符号到底怎么访问」的底层机制——IAT / GOT / PLT、copy relocation、two-level namespace、可见性控制...
错误信息往上滚、多行进度条永远停在最后、还一秒一跳——还不会被错误信息撞乱。 这件事在 Bazel、Docker、Cargo 里见过无数次,单行 \r 的小把戏明显不够用。中文社 区几乎没人讲透,我顺手研究了一下,把”擦帧—写消息—重画”这一套从 VT100 起源讲到 tqdm 与 Blade 的实际代码(包括 Windows 上必须自己开启 VTP 这件事),最后给一个 50 行的 ...
一段 [[gnu::returns_twice]] 的标注,三种编译器的反汇编,把一个断断续续调了两天的 fiber bug 钉死成”这是编译器之间的差异,不是平台之间的差异”。 最近在做 flare 的 macOS 移植,遇到一个相当顽固的 bug:fiber 的测试在 macOS (Apple Silicon)上一跑就 abort,错误信息长这样: F fiber_entit...
最近花了些时间,用 AI 辅助系统性地阅读了 vLLM 的源码,整理成了一份深度分析文档集: 👉 vllm-analysis 为什么读 vLLM 源码 我是一名资深后台开发工程师,过去十几年一直在做服务端性能优化和系统架构——CPU 缓存行对齐、内存池设计、无锁队列这些是日常。进入 AI 时代,技能栈需要升级,但回头一看,LLM 推理引擎这个方向其实最对味:它本质上是显存管理 + 算子...
随便写点东西吧。 测试