是否有公司(i)和我之间的性能差异:= i + 1的德尔福?

我有很多的方法

i := i +1;

在里面,我觉得

inc(i);

看起来好多了。 是否有性能差异还是函数调用刚刚获得由编译器内联? 我知道这可能并不重要,在所有我的应用程序,我只是好奇。

编辑:我做了性能的一些计量和发现的差异是非常小的,实际上小到5.1222741794670901427682121946224e-8! 所以,这真的无所谓。 和优化选项真的没有改变结局了。 感谢所有的提示和建议!

--------------解决方案-------------

现代编译器优化代码。
增量(i)和I:= i + 1的; 是几乎一样的。

无论你喜欢用。

编辑:正如吉姆McKeeth纠正:用溢出检查是有区别的。 公司不会做了一系列检查。

有一个巨大的区别,如果溢出检查是否打开。 公司基本上不会做溢出检查 。 难道因为有人建议,使用反汇编窗口看到的差异,当你打开这些编译器选项(这是为每个不同的)。

如果这些选项被关闭,那么就没有区别。 凭经验,用公司当你不关心一个范围检查失败(因为你不会得到一个例外!)。

这一切都取决于对“我”的类型。 在Delphi中,人们通常声​​明循环变量为“i:整数”,但它可能也成为“我:PChar类型”解析为PAnsiChar下面德尔福2009年和FPC(我猜在这里)的一切,并PWideChar上德尔福2009年和Delphi.NET(也猜测)。

自2009年德尔福可以做指针运算公司(我)也可以在类型化的三分球完成(如果它们被定义POINTER_MATH打开)。

例如:

type
PSomeRecord = ^RSomeRecord;
RSomeRecord = record
Value1: Integer;
Value2: Double;
end;

var
i: PSomeRecord;

procedure Test;
begin
Inc(i); // This line increases i with SizeOf(RSomeRecord) bytes, thanks to POINTER_MATH !
end;

至于其他anwsers已经说了:这是relativly容易看到打开了一下编译器做你的代码:

视图>调试窗口> CPU窗口>拆卸

请注意,如优化的编译器选项,OVERFLOW_CHECKS和RANGE_CHECKS可能会影响最终的结果,所以你应该注意根据您的喜好有设置。

这个小提示:在每一个单位,$包括文件操纵的编译选项,这样一来,你就不会当你.bdsproj或.dproj由于某种原因损坏,松动的设置。 (看JCL的源代码上这是一个很好的例子)

您可以在CPU窗口,可以验证它,而调试。 所产生的CPU指令是相同的两种情况。

我同意Inc(I);看起来更好,尽管这可能是主观的。

更正:我刚刚发现这个对公司的文件中:

“在某些平台上,公司可以生成优化的代码,在紧密循环尤其有用。”

因此,它可能是最好坚持公司

你总是可以写两件的代码(在单独的程序),将断点在代码中,并在CPU窗口比较汇编。

在一般情况下,我会使用INC(一)无论它显然被只作为某种类型的循环/索引,+ 1只要1将使得代码更易于维护(例如,它可能会见效到另一个整数未来),或单纯从算法/天赋点更易读。

“在某些平台上,公司可以生成优化的代码,在紧密循环尤其有用。” 为优化编译器,如德尔福也就没有在意。 这是一个关于旧的编译器(如Turbo Pascal的)

分类:性能 时间:2015-03-15 人气:0
本文关键词: 性能,德尔福
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.510 (s). 10 q(s)