gpt4 book ai didi

visual-c++ - 使用 MSVC 获取预处理源代码的最快方法是什么?

转载 作者:行者123 更新时间:2023-12-04 04:25:59 26 4
gpt4 key购买 nike

我正在尝试找到最快的方法来获取 C 源文件的完整预处理源代码(我不需要#line 信息其他注释,只需要原始源代码)。

我有以下小测试程序,它只包含 Windows 头文件 (mini.c):

#include <windows.h>

然后我使用 Microsoft Visual Studio 2005 运行此命令:

cl /nologo /P mini.c

生成一个 2.5MB 的 mini.i 文件需要 6 秒;将其更改为

cl /nologo /EP mini.c > mini.i

(跳过注释和#line 信息)仅需 0.5 秒即可写入 2.1MB 的输出。

有没有人知道进一步改进这一点的好技术,不使用预编译头文件

我问的原因是我写了一个流行的 ccache 的变体MSVC 的工具。作为工作的一部分,程序需要计算预处理源代码的哈希和(以及其他一些东西)。我想尽快完成。

也许有可用的专用预处理器二进制文件,或其他可能有用的命令行开关?

更新:我刚刚想到的一个想法:定义 WIN32_LEAN_AND_MEAN宏去除大量很少需要的代码。这将上述预处理器的运行速度提高了大约 3 倍。

最佳答案

您正在重复处理同一个源文件 ( <windows.h> ),这反过来会拉入许多其他文件。这<windows.h>位于默认的 SDK 目录中。

现在,处理这个不变的文件需要很长时间。然而,您可以相信它不会改变——毕竟它是公共(public)界面的一部分。因此,您可以对其进行预处理 - 例如去除注释 - 并将该版本传递给 cl /EP .

当然,这通常是一个 I/O 密集型任务,但其中混杂了大量的 CPU 部分。并行处理多个源的方法将有助于提高总吞吐量。测量单源预处理时间不太相关。

最后,测量将输出写入 NUL 的时间.您不应该包括编写 mini.i 所需的时间到磁盘,因为您打算将输出通过管道传输到 md5sum .

关于visual-c++ - 使用 MSVC 获取预处理源代码的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4500826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com