c中逻辑运算符之间的空格

Rax*_*kin 2 c optimization

我在在线评判网上注册,其中预定义测试存在不同的问题以计算执行时间.

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

if(x1 < x2 || y1 < y2)
//code
Run Code Online (Sandbox Code Playgroud)

第二次提交:

if(x1 < x2 ||y1 < y2)
//code
Run Code Online (Sandbox Code Playgroud)

正如你在第二次提交中看到的那样,我之间没有空格||,y1而且我的结果是:

  • 首先提交:0052
  • 第二次提交:006

如何在第一次提交中获得更短的时间?代码是一样的,唯一的变化就是空格.

编辑:法官使用"gcc"编译器,测试总是相同的.

Mur*_*nik 7

这两个代码片段将生成完全相同的可执行文件,因此空白是无关紧要的.它可能产生任何影响的唯一地方是编译时间(因为要解析的字节少一个字节),但如果它显而易见,我会非常惊讶.

如此短的运行时间,任何数量的环境变量都可能使结果产生偏差 - 临时内存加载,某个页面在错误的时刻交换到磁盘,您可以命名.底线 - 这可能是一个糟糕的基准.这个程序应该执行一个gazilion时间和平均值进行比较.执行一次给人方式太大的重量,无趣的噪音.


650*_*502 5

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

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

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


Pra*_*tla 5

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