GCC 预处理器不工作?大文件有无注释编译时间

GCC preprocessor not working? Compile time of large files with or without comments

我怀疑 gcc 预处理器没有正常工作,因为编译时间有或没有注释以及有或没有优化之间存在莫名其妙的相关性。

我有一个巨大的 Matlab 生成的 c 文件(大约 70.000 行)。

我注意到当我使用优化级别 -O3 编译它时,编译时间超过 30 分钟。关闭优化 (-O0) 时只需 4 分钟。这正是我所期望的,因为大文件的优化可能很复杂。

但是,如果我在 Matlab 中生成相同的文件而没有注释(或使用编辑器删除它们),它会在 16 分钟内编译,而在没有优化的情况下会在 2 分钟内编译。

因子 2 从何而来?我希望优化是在预处理之后完成的,预处理应该删除任何注释。这将导致独立于 o 级的固定时间差。我很困惑。

我试图显示预处理后的输出(使用 gcc 选项 -E),但没有任何评论。如果我另外使用选项 -C 会有评论。

如果我删除空行和连续空格,它也会影响编译时间。编译时间似乎是线性文件大小取决于...

找到原因了:

有人(在项目的早期阶段)打开了选项“-Wa,-amhls”,这导致汇编程序从 .S 和 .C 输入文件生成一个超过 500.000 行长的组合 .lst 文件。

在 Windows 机器上构建该文件需要 30 多分钟。 (Linux 快多了!)

这也是构建时间取决于优化和评论的原因 on/off。两者都会影响该 .lst 文件的长度。

使用该选项关闭我的项目构建不到 3 分钟。