我已将C程序移植到C ++ Template Meta程序。现在我要比较运行时。 由于C ++程序几乎没有运行时,我应该如何比较这两个程序 我可以将C运行时与C ++编译时间进行比较吗?还是只是没有可比性?
答案 0 :(得分:5)
您可以比较任何想要比较的内容。没有一个真正的规则可以比较什么。
您可以比较每个版本执行所需的时间,或者您可以比较编译每个版本所需的时间。
或者您可以比较程序的长度或源文件中“r”字符的数量。 您可以比较每个文件的时间戳。
如何比较两个程序取决于你想要展示的内容!
如果你想表明一个人比另一个人执行得更快,那么同时运行两者,计算他们执行的时间,并比较那些数字。
如果你想表明一个编译速度比另一个编译得快,那么就要花时间编译它们。
如果您认为C ++程序的编译时间与C程序的运行时间之间的关系是相关的,那么请进行比较。
决定你想要展示的是什么。然后你会知道要比较什么。
答案 1 :(得分:2)
如果我理解正确,你用一个完全基于模板的程序重写了一个C程序?因此,您需要将运行C程序所需的时间与C ++程序进行比较,该程序几乎不需要时间,只需将结果写出来。
在这种情况下,我认为它不具有可比性 - 最终用户将看到C程序需要x秒运行,而C ++会立即完成。但是,开发人员将看到C程序在x秒内编译,而C ++在很多秒内编译。
您可以将C ++编译时间与C运行时间进行比较,如果应用程序旨在生成结果并且从不运行两次,那么是的,您可以通过这种方式比较时间。如果程序设计为多次运行,则运行时间是您需要比较的。
我希望您在C ++模板代码中添加了大量注释:)
PS。我很好奇 - 与两者的编译时间相比,C运行了多长时间?
答案 2 :(得分:2)
因为C ++程序总会产生相同的结果,为什么还要烦恼呢?使用任一程序计算结果一次,然后将其替换为:
int main()
{
printf("<insert correct output here>\n");
return 0;
}
答案 3 :(得分:0)
我认为有意义的是比较两个程序的编译时间,然后运行时间,然后你就可以计算出你已经分摊了多少次运行的额外编译时间。
答案 4 :(得分:-1)
这就是我认为你要做的事情:
你还没有说过你的c程序做了什么,所以我们可以说它计算了一个指定精度的余弦数。您已将此程序转换为基于c ++模板的等效项,它在编译时执行相同的操作以产生编译时的内容值。这是一个合理的事情,因为你可能有一个使用“硬编码”余弦值的算法,你不希望有一个随机数字表。有关此实际使用的示例,请参阅this article(或者搜索Blitz和/或Todd Veldhuizen以获取更多示例)。
在这种情况下,您希望将C ++正弦计算器的编译时性能与原始C版本的运行时性能进行比较。
直接比较编译C ++源文件的时间和运行C版本的时间几乎肯定会显示编译时间明显变慢。但这不是一个公平的比较,因为编译器做的不仅仅是“执行”模板代码。
编辑:您可以通过创建c ++程序的副本来补偿编译器开销,该程序包含一些与模板化代码生成的代码相同的简单代码 - 即您必须手动编译模板化代码如果这是有道理的。如果然后再编译该源代码,则编译原始C ++模板化程序的时间和时间之间的差异大概就是执行模板所需的时间。
答案 5 :(得分:-2)
今天的C和C ++编译器共享相同的后端,因此很可能生成相同的汇编代码。
C ++只是一个带注释的C,你可以在Cplusplusing时做好C;)
C只是C ++的老兄。