C中的clock()函数总是至少返回50

时间:2013-08-31 21:41:48

标签: c

我不是程序员,但我最近对编码感兴趣,开始自己学习C,然后我开始用它来解决ProjectEuler.net的问题。

我一直在我写的每个源代码的末尾添加这两行:

printf ( "The number you are looking for is %d", 0 );
printf ( "\n... and took %d / %d seconds to compute that", clock(), CLOCKS_PER_SEC );

...我用我需要的数字替换零作为答案。

事情是;无论我如何优化我的工作,printf永远不会显示少于50个时钟,即使我使用完全空白的源代码而没有除这两个以外的其他操作,它仍然显示50个时钟。这是花费这50个时钟的#include在顶部,还是别的?

我的一些填充源代码也显示50个时钟;所以...我不知道在这里推断出什么,我写的一些东西真的需要0毫秒才能解决?

2 个答案:

答案 0 :(得分:5)

您的系统时钟经常“滴答”(可能每50毫秒一次?)而不是连续运行。所以clock()函数测量了进程自启动以来消耗的这些“滴答”的数量。这种方法并不适合测量短于一个滴答的持续时间。

如果您想要更高的精确度,则必须使用高分辨率计时器

答案 1 :(得分:0)

好的,我自己解决了我的问题。我最近转而使用Sublime Text来编写我的源代码,并制作了一个批处理文件,用于编译.c文件中的.exe文件,该文件使用Visual Studio 2012的cl.exe工具

这导致我在Visual Studio 2012上使用实际的.exe而不是 Local Windows Debugger 的东西

当我意识到+50时钟只发生在 Local Windows Debugger 时。我刚才写的代码显示; - 当我启动我通过Sublime Text + batchCompiler生成的.exe时,0~1个时钟 - 当我每次使用本地Windows调试器启动Visual Studio 2012在%ProjectDirectory%\Debug\下生成的.exe时,0~1个时钟 - 当我只查看Visual Studio 2012的本地Windows调试器

时,只有50~51个时钟

所以......是的,它只是关于Visual Studio 2012辅助执行