2011-03-07 24 views
-1

有一个大整数32/64位,我正在修改几个位的位置。哪种编程风格更好?从优化的角度来看

样式1

Integer64 = Modify(Integer64); 

样式2

Modify(Integer64); 

样式3

Using the same style as the 1st, but inline function 
  • 第一)返回一个64位的修饰 值
  • 2nd)创建的备份缓冲区为 ,原始值为 也被复制。然后将计算结果 存储到原始输入值 的地方
  • 3)修改是一个内联 函数。

我也相信Style 2对代码中的特定步骤更具描述性。

从执行角度来看,哪种风格最适合使用?

+10

不要尝试过早优化。永远。如果你对此很认真,看到编译器生成的程序集而不是源代码更为重要。 – Jon 2011-03-07 21:31:44

+0

这就是为什么我问。 – Nocturnal 2011-03-07 22:12:58

回答

6

不要从优化的角度选择风格。选择一个当未来的维护人员阅读时,将最清楚地表明发生了什么。然后,如果您的程序出现性能问题,您可以进行配置文件并查看该方法是否导致问题,如果存在,请考虑您的选择。

+0

确实。会不会有人想到这些孩子? – msandiford 2011-03-07 21:42:22

+0

没有任何选项难以阅读。是的,这不是一切,但表现可能很重要。我认为没有理由忽略性能,因为你的回答似乎表明。 – 2011-03-08 00:26:05

1

在我遵循的范围内,除非您通过引用传递参数,否则第二种方法不会修改参数。

使用内联函数可能是您最有效的方法,可能是我选择的版本。但是,可能还有其他一些考虑事项,这些考虑事项仅取决于您对整数所做的操作。

+0

在这里和那里移动位。 – Nocturnal 2011-03-07 22:14:53

3

机会很好,它没有任何区别。

使用现代编译器,将函数标记为内联很少会对代码是否内联生成有任何显着影响。如果这个函数的含义与你所暗示的一样短,那么它可能会被内联生成,不管你是否将它标记为内联。

一旦发生这种情况,无论您将其复制到临时和退出,还是就地修改等等,都不会产生真正的差异。编译器将分析数据流,并只根据需要复制它。机会很不错,无论哪种方式,它都会被加载到一个寄存器中,根据需要进行修改,并存储回原始位置。

所有这些都假设你关闭了编译器的优化。一些编译器确实有中间优化设置,其中函数只有在内联显式标记时才会内联生成 - 但是,坦率地说,我很少看到这种设置的很多用处(尽管您可能 - 它们有时可用于代码断行时完全优化打开)。