大型代码模型到底有什么用?
来源:fzakaria.com — 2026-07-26
📋 概述
Farid Zakaria 在工作中构建超大二进制文件,却发现 GCC 的 -mcmodel=large 在实践中几乎不可用。TLS(线程局部存储)的指令序列在编译器层面就固定为 32 位,large code model 根本没有对应的替代指令。这意味着 mcmodel=large 无法实现其声称的目标。作者深入分析了重定位溢出、TLS 困境以及构建 >2GiB 测试二进制的困难。
🔑 核心要点
- -mcmodel=large 理论上不做任何地址或大小假设,但实践中 TLS 指令序列是硬编码 32 位的。
- 编译器输出的 TLS 指令没有 large code model 的替代实现,使得该模式无法构建复杂的超大二进制文件。
- 构建 >2GiB 的测试二进制极为困难:生成数十亿条真实指令并汇编,目标文件巨大。
- 重定位溢出不只是磁盘字节数的问题,而是虚拟地址空间中的距离问题。
💡 金句
mcmodel=large 无法构建复杂的超大二进制文件,尽管这就是它的设计目标。TLS 指令序列就是 32 位的,没人想过要给它换个替代方案。
👍 0
👎 0
← 返回 Lobsters 首页