将二进制大小减小到 14k 并放弃 C++运行时

主要观点:

  • fmt 格式化库以二进制文件体积小著称,通过在不同级别应用类型擦除实现,减少模板膨胀,提高编译速度,相比其他类似库更高效且安全。
  • 介绍了 fmt 的格式化参数传递方式和输出迭代器等类型擦除的设计,通过vformat函数和特殊的缓冲区 API 实现。
  • 以示例代码展示 fmt 编译后的二进制文件体积比 IOStreams 小,且提供运行时类型安全,错误可在编译时捕获,避免未定义行为等。
  • 2020 年曾优化库大小至 100kB 以下,如今使用 Dragonbox 算法进行浮点格式化,探讨其对二进制大小的影响及进一步优化的可能性。
  • 在内存受限设备上使用 fmt 有兴趣,通过实验性的实现去除特殊类型处理,减少二进制大小,但仍存在一些 locale 相关的遗留问题,可通过宏进行控制。
  • 库中有一些在速度和大小之间权衡的区域,通过配置宏可控制使用 fallback 实现来减少二进制大小。
  • 尝试去除对 C++标准库的依赖,通过替换默认分配器等方式,将二进制大小减少至 14kB,验证不再依赖 C++运行时。

关键信息:

  • fmt 库通过类型擦除实现小二进制文件和快速编译。
  • 支持扩展 API 处理任意类型格式化。
  • 不同优化措施对二进制大小的影响,如禁用 locale 支持、去除特殊类型处理等。
  • 存在一些在速度和大小之间权衡的函数和区域。
  • 尝试去除对 C++标准库的依赖及相关实现。

重要细节:

  • 展示了不同优化措施下编译后的二进制文件大小变化,如从 75kB 到 14kB。
  • 介绍了 Bloaty 工具用于分析二进制文件大小的分布情况。
  • 给出了具体的函数实现和代码示例,如计算十进制位数的函数等。
  • 提及了不同的宏定义用于控制各种优化选项。
阅读 10
0 条评论