SQLite 库的大小

SQLite 库使用的代码空间取决于目标平台、编译器和优化设置。这些变量也会影响性能。

下图显示了截至 2017 年 10 月 8 日 SQLite 在 x86_64 上的 Ubuntu 16.04.3 上测试的各种编译器和优化设置的相对大小和性能。一般观察:

  1. Clang/LLVM 编译器无法与 GCC 竞争。Clang 生成的二进制文件始终比 GCC 生成的二进制文件更大、更慢。

  2. 配置文件引导优化 (PGO) 对 SQLite 没有帮助。PGO 生成的二进制文件大约大 1%,慢大约 0.33%。

  3. GCC-7 生成的二进制文件比 GCC-5 更小但速度更快,但差异并不大。

  4. 使用 GCC 和 -Os 编译生成的二进制文件大小略小于 500KB。(2018-07-07更新:由于加入了UPSERTwindow functions等新特性,现在库占用空间略大于500KB。)

  5. 开发人员需要做出的唯一重要设计决策是使用 -Os(优化大小)还是 -O6(优化速度)。-O6 设置使二进制文件的运行速度提高约 2% 或 3%,但也增大了 66%。这里的性能是通过使用 cachegrind 计算 CPU 周期来衡量的。分析中不考虑 I-cache 未命中。如果考虑 I-cache 未命中,使用 -O6 构建可能不会比使用 -Os 构建更快。

  6. 考虑到以上所有因素,SQLite 开发人员建议使用带有 -Os 优化设置的 GCC-7 编译 SQLite。


细节