Объединение sqlite
Я недавно читаю исходный код sqlite3. В объединенной версии есть только четыре файла. На официальном сайте говорят, что:
"Объединение также заставляет его работать быстрее"
"Мы измерили улучшение производительности от 5 до 10%, когда мы используем объединение для компиляции SQLite, а не отдельных исходных файлов".
Я не понимаю, как они это делают и почему. У кого-нибудь есть какие-либо идеи? У нас есть какие-либо инструменты для этого?
1 ответ
Вы можете получить похожий результат, если проанализируете все файлы.c, извлеките все #include
s, затем создайте огромный файл, который сначала перечисляет все включения, а затем перечисляет все остальное содержимое этих.c файлов.
Таким образом, у вас есть весь код в одном модуле перевода, что позволяет компилятору видеть весь код одновременно и выполнять более эффективные оптимизации. Это актуально для большинства C-компиляторов, но новейшие компиляторы имеют так называемую генерацию кода во время компоновки, которая позволяет компилятору видеть код нескольких блоков перевода одновременно (во время компоновки) и генерировать лучший код даже без уловки объединения.