Объединение sqlite

Я недавно читаю исходный код sqlite3. В объединенной версии есть только четыре файла. На официальном сайте говорят, что:

"Объединение также заставляет его работать быстрее"

"Мы измерили улучшение производительности от 5 до 10%, когда мы используем объединение для компиляции SQLite, а не отдельных исходных файлов".

Я не понимаю, как они это делают и почему. У кого-нибудь есть какие-либо идеи? У нас есть какие-либо инструменты для этого?

1 ответ

Решение

Вы можете получить похожий результат, если проанализируете все файлы.c, извлеките все #includes, затем создайте огромный файл, который сначала перечисляет все включения, а затем перечисляет все остальное содержимое этих.c файлов.

Таким образом, у вас есть весь код в одном модуле перевода, что позволяет компилятору видеть весь код одновременно и выполнять более эффективные оптимизации. Это актуально для большинства C-компиляторов, но новейшие компиляторы имеют так называемую генерацию кода во время компоновки, которая позволяет компилятору видеть код нескольких блоков перевода одновременно (во время компоновки) и генерировать лучший код даже без уловки объединения.

Другие вопросы по тегам