2014-12-07 112 views
2

我在网上法官网上注册,其中存在预定义测试的不同问题以计算执行时间。c中的逻辑运算符之间的空格

我已经提交了相同的代码两次,但有一点不同:

if(x1 < x2 || y1 < y2) 
//code 

而第二个提交:

if(x1 < x2 ||y1 < y2) 
//code 

正如你可以看到在第二提交我没有空间在||y1之间,我的结果是:

  • 第一次提交:0052
  • 二提交:006

这怎么可能,我得到的较低的第一时间提交?代码是一样的,唯一的变化就是空间。

编辑:法官使用“gcc”编译器,并且测试总是相同的。

+7

这与空间无关。完全一样。 – Maroun 2014-12-07 07:55:02

回答

7

这两个代码片段将产生完全相同的可执行文件,所以空白是无关紧要的。它唯一的地方可能有任何影响是编译时间(因为有一个字节少解析),但我会极其惊讶,如果它不明显。

由于运行时间太短,任何数量的环境变量都可能导致结果歪斜 - 临时内存负载,某个页面在错误时刻被交换到磁盘,您将其命名。底线 - 这可能是一个糟糕的基准。这个程序应该执行一次gazilion时间和平均值比较。执行它一次会给无聊的噪音带来太多的重量。

5

空格在C语言中(以及在大多数其他语言中)是不相关的。在任何体面的编译器中,两个版本将生成完全相同的机器语言指令输出。

速度的差异取决于度量的一些随机性,而不是间距。

为了获得更快的代码,您需要思考一个更好的算法,或者如果抽象算法已经是最优的,则需要考虑缓存一致性等问题。

3

如前所述,空白是无关紧要的,不会导致任何显着的延迟。不要从一组数据中得出结论,而是检查多次执行,比如说10来查看差异。 这种差异也可能是由于编译代码的服务器端产生的结果,因为在执行过程中服务器的状态可能不同。

4

在大多数编程语言中,空格都是不重要的。 在实际应用中,执行/编译时间取决于您使用的算法而不是空白。

0

执行时间取决于 1)计算机的速度 2)代码的效率。(逻辑)

即使每次运行程序时逻辑相同,其执行时间也会不同。