什么是 lto1.exe?

What is lto1.exe?

当您检查 mingw 时,您会发现 c 编译器 cc1.exe(有趣的是,在 9.2 中它的大小增长了将近 25 MB)cc1plus.exe 是 c++ 编译器(相同大小)collect2.exe linker (afiak) 疯了 什么是 lto1.exe?

我在谷歌上搜索了一个多小时,但没有找到这方面的信息。是否有关于此内容的有用信息可供阅读?发送

ps。我怀疑它可能与 link 时间优化有关,但没有找到更多关于它的信息,我想知道得更多

还有一个问题什么是 gcc.exe g++.exe 和 mingw32-gcc.exe mingw32-g++.exe 那么

我需要更多信息,越多越好,tnx

这不是 mingw / Windows 特定的;它是 GCC 的一个特性/组件。

what is lto1.exe?

它是 lto 编译器 :o)。 lto 基本上是用 -flto 编译时编写的字节码,其中 "lto" 或 "LTO" 代表 "link-time optimization".

这些优化不是由linker执行,而是由编译器在link时间执行当来自所有模块的(字节)代码可用时执行全局优化。流程如下:

  1. C/C++ 编译器(cc1 用于 C 或 cc1plus 用于 C++)将 C/C++ 编译为字节码并将其写入汇编文件*.s.
  2. 汇编程序像往常一样由汇编器汇编成目标代码*.o。 lto-code 在专门的部分中发布。
  3. 在 link 时间,linker(插件)回调编译器并按要求提供所有对象和库。提取字节码,lto1 编译器将其编译为最终机器码。
  4. 最终的机器代码由汇编程序汇编成目标代码。
  5. linker links / 将这些对象定位到最终的可执行代码。

您在 -save-temps and having a look at the saved *.s files. Recent versions of GCC don't even bother with writing assembly code; they are just writing lto code. To see the assembly code, specify -ffat-lto-objects 的 lto 部分中看到了字节码。但是请注意,这是 不是 最终代码。

funny growing in size in 9.2 it is almost 25 MB

GCC 可执行文件的大小不仅取决于 GCC 主要版本,而且在很大程度上取决于用于构建 GCC 的编译器的优化程度。

[编辑] 有关 LTO 的一些信息可以在 GCC wiki for LTO. Notice however that this page is no more active. One goto place for gory GCC internals is the gcc-help@gcc.gnu.org mailing list where all the developers are. There is also a section about LTO in the GCC internals.

上找到