Libffi 是一个广泛使用的函数调用解释器,它允许程序在运行时根据描述调用 C 函数,是 GObject、Python 等跨语言调用基础设施的核心。由于现代操作系统出于安全考虑,严格禁止内存同时具备“可写”和“可执行”权限,传统的 JIT 编译优化方案难以实施。为了解决 Libffi 长期以来因重复解析参数类型而导致的性能瓶颈(比直接调用慢 16 倍),作者 Anthony Green 提出了一种名为“计划”的优化机制。该机制在首次处理函数签名时,一次性遍历类型树并生成一个扁平化的字节码指令列表(即“计划”),后续调用只需执行这些预设的移动指令,完全消除了重复的分类计算开销。在纯 64 位通用寄存器参数的常见场景下,Libffi 甚至能通过手写的汇编 Thunk 跳过解释循环,直接操作寄存器。测试表明,新方案将 FFI 调用开销降低了约 6 倍,使其与原生函数调用的性能差距缩小至 3 倍以内。目前该功能已提交至 GitHub 的 master 分支,主要针对 x86-64 架构,且无需修改绑定代码即可透明加速。
事件分析
💡 核心观点:Libffi 通过预计算“字节码计划”在不触碰 JIT 安全红线的前提下实现了 6 倍性能提升,为系统级基础设施在安全约束下的性能优化树立了新标杆。
原文链接:Hacker News







AI周刊:大模型、智能体与产业动态追踪