2

我不是程序员,但我最近对编码产生了兴趣,开始自己学习 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 个时钟。是上面的#include 花费了这 50 个时钟,还是其他原因?

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

4

2 回答 2

5

您的系统时钟每隔一段时间就会“滴答”一次(也许每 50 毫秒一次?),而不是连续运行。因此,该clock()函数测量您的进程自启动以来消耗的这些“滴答声”的数量。这种方法并不真正适合测量短于一个刻度的持续时间。

如果您想要更精确,您将不得不使用高分辨率计时器

于 2013-08-31T21:44:41.853 回答
0

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

这导致我使用实际的 .exe 而不是Visual Studio 2012 上的本地 Windows 调试器

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

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

于 2013-09-17T21:46:47.613 回答