【问题标题】:Preprocessing time in gcc (measurement methods)gcc 中的预处理时间(测量方法)
【发布时间】:2013-07-14 20:31:06
【问题描述】:

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

【问题讨论】:

  • 您是根据“预处理器所花费的编译时间的比例”来问这个问题吗?请问您为什么需要知道?
  • time gcc -E source.c 大致足以给你一个想法。
  • @Floris 我想我的意思是翻译阶段的前 4 个步骤。我想知道如何有效地使用结构。
  • @user2485710 谢谢,这行得通。但是这些值在某种程度上是不稳定的 - sys 的差异高达 100%。时间函数似乎适用于其他一些过程,目前我还不能真正指定。
  • “我想知道如何有效地使用结构”。不是通过测量预处理时间,这是肯定的。

标签: gcc time c-preprocessor


【解决方案1】:

Custom gcc preprocessor 并使用time,您可以在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 ..下面的时间是预处理器所用的时间。

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

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

【讨论】:

    猜你喜欢
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2011-02-06
    • 1970-01-01
    • 2014-09-13
    相关资源
    最近更新 更多