【发布时间】:2011-09-14 10:14:40
【问题描述】:
最近在看sqlite3的源码。在合并版本中,只有四个文件。在official website 上,他们说:
“合并也让它跑得更快”
“当我们使用合并来编译 SQLite 而不是单独的源文件时,我们测量到性能提高了 5% 到 10%。”
我不明白他们是如何做到的以及为什么。有没有人有任何想法?我们有什么工具可以做到这一点吗?
【问题讨论】:
标签: c sqlite amalgamation
最近在看sqlite3的源码。在合并版本中,只有四个文件。在official website 上,他们说:
“合并也让它跑得更快”
“当我们使用合并来编译 SQLite 而不是单独的源文件时,我们测量到性能提高了 5% 到 10%。”
我不明白他们是如何做到的以及为什么。有没有人有任何想法?我们有什么工具可以做到这一点吗?
【问题讨论】:
标签: c sqlite amalgamation
如果您解析所有 .c 文件,提取所有 #includes,然后构建一个巨大的文件,首先列出所有包含,然后列出这些 .c 文件的所有其他内容,您可以获得类似的结果。
这样您就可以将所有代码放在一个翻译单元中,从而使编译器可以一次查看所有代码并执行更好的优化。这与大多数 C 编译器有关,但最新的编译器具有所谓的 link-time code generation,它允许编译器一次(在链接时)查看多个翻译单元的代码,即使没有合并技巧也能生成更好的代码。
【讨论】: