0

有没有一种方法可以测量预处理器执行其步骤所花费的时间?或者这只是简单的计算代码行数(更多代码行 -> 更多时间用于预处理)?

4

1 回答 1

0

自定义 gcc 预处理器和使用时间,您可以编写以下包装器cc1

#!/bin/sh
echo "cc1 $*" >&2
time $(${COLLECT_GCC} --print-prog-name=cc1) "$@"

包装器输出cc1带有参数的命令和所花费的时间:

$ gcc -no-integrated-cpp -B$PWD 1.c
cc1 -E -quiet 1.c -mtune=generic -march=x86-64 -o /tmp/cckqYvRJ.i

real    0m0.014s
user    0m0.009s
sys 0m0.005s
cc1 -fpreprocessed /tmp/cckqYvRJ.i -quiet -dumpdir a- -dumpbase 1.c -dumpbase-ext .c -mtune=generic -march=x86-64 -o /tmp/ccePvbYm.s

real    0m0.021s
user    0m0.015s
sys 0m0.006s

下面cc1 -E .. 的时间是预处理器所用的时间。

如果您指的是分别测量每个翻译阶段所花费的时间,那么不,这是不可能的。这些阶段不是“单独”完成的——所有阶段都同时混合在一起,由一个程序完成。最终结果是“好像”这些阶段将一个接一个地完成。从链接中,强调我的:

C 源文件由编译器处理,就好像按照这个确切的顺序发生以下阶段一样。只要行为相同,实际实现可能会组合这些动作或以不同方式处理它们。

于 2021-12-27T20:48:18.857 回答