0

我有以下代码:

procedure p1(const s:string);
var i,l:integer;

  function skip:boolean; //inline not possible
  begin
    while (i<=l) and (s[i]<=' ') do inc(i);
    result:=i<=l;
  end;

begin
  //skip() is VERY often called here
end;


procedure p2(const s:string);

  function skip(const s:string;var i:integer;l:integer):boolean;inline; 
  begin
    while (i<=l) and (s[i]<=' ') do inc(i);
    result:=i<=l;
  end;

var i,l:integer;
begin
  //skip(s,i,l) is VERY often called here
end;

你更喜欢哪一个?第一个可读性更好,但速度较慢,因为 skip() 不能内联。第二种更快,但很丑,因为每次都必须指定所有参数。你知道另一个好的可读和快速的解决方案吗?

4

2 回答 2

2

不要过早优化。

除非您真的需要性能提升,否则请坚持使用更清晰的代码。

更清晰的是第二个。

于 2012-06-01T19:10:37.613 回答
2

第二个更清晰。我并不教条地反对使用全局变量,但第二个例子看起来更干净。

由于第二个示例也更快......那么你的答案很简单。第2个。

....作为旁注,如果您真的需要这么快的速度,内联汇编和展开循环可能是可能的选择...但我不知道如何使用此代码,或者如果那会有所作为。

于 2012-06-01T19:57:18.240 回答