Это не специфично для mingw / windos; это функция / компонент G CC.
, что такое lto1.exe?
Это компилятор lto: o). lto - это в основном байт-код, написанный при компиляции с -flto
, где «lto» или «LTO» означает «оптимизация во время соединения».
Эти оптимизации не выполняется компоновщиком, но компилятором в время компоновки для выполнения глобальных оптимизаций, когда доступен (байт-) код из всех модулей. Процесс выглядит следующим образом:
- Компилятор C / C ++ (
cc1
для C или cc1plus
для C ++) компилирует C / C ++ в байт-код и записывает его в файл сборки *.s
. - Сборка собирается ассемблером в код объекта
*.o
как обычно. Этот код поставляется в отдельных разделах. - Во время компоновки компоновщик (плагин) вызывает компилятор и предоставляет все объекты и библиотеки в соответствии с запросом. байт-код извлекается, и компилятор
lto1
компилирует его в окончательный машинный код. - Окончательный машинный код собирается ассемблером в объектный код.
- Компоновщик связывает / находит эти Объекты к окончательному исполняемому коду.
Вы видите байт-код в разделах lto с -save-temps
и просматриваете сохраненные файлы *.s
. Последние версии G CC даже не беспокоятся о написании ассемблерного кода; они просто пишут код. Чтобы увидеть код сборки, укажите -ffat-lto-objects
. Заметьте, однако, что это , а не окончательный код.
Забавный рост в 9.2 размера - это почти 25 МБ
Размеры G * Исполняемые файлы 1063 * зависят не только от основной версии G CC, но также и от того, насколько хорошо оптимизируется компилятор, используемый для сборки G CC.
[Редактировать] Некоторую информацию о LTO можно найти на G CC вики для LTO . Однако обратите внимание, что эта страница больше не активна. Одно из мест, где можно встретить Gory G CC: список рассылки gcc-help@gcc.gnu.org , где находятся все разработчики. Есть также раздел о LTO во внутренних органах G CC .