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() をインライン化できないため、遅くなります。2 番目の方法は高速ですが、毎回すべてのパラメーターを指定する必要があるため、非常に見栄えが悪くなります。別の読みやすく高速な解決策を知っていますか?

4

2 に答える 2

2

2番目の方が読みやすいです。私はグローバル変数の使用に独断的に賛成しているわけではありませんが、2 番目の例はすっきりしているように見えます。

2番目の例も高速なので...答えは簡単です。2つ目。

....そして、余談ですが、本当にそれだけの速度が必要な場合は、インラインasmとループの展開が可能なオプションになる可能性があります...しかし、このコードがどのように使用されているか、またはそれは違いを生むでしょう。

于 2012-06-01T19:57:18.240 に答える
2

時期尚早に最適化しないでください。

パフォーマンスの向上が本当に必要でない限り、より明確なコードを使用してください。

より明確なものは2番目のものです。

于 2012-06-01T19:10:37.613 に答える