4
Delphiのインライン関数に「What's wrong with using inline functions」と「Can a recursive function be inline」が適用されますか?さらに、Delphiで再帰的なインライン関数がどのように処理されるかは誰にも分かりますか?Delphi 2009コンパイラは再帰インラインメソッドをどのように処理しますか?
Delphiのインライン関数に「What's wrong with using inline functions」と「Can a recursive function be inline」が適用されますか?さらに、Delphiで再帰的なインライン関数がどのように処理されるかは誰にも分かりますか?Delphi 2009コンパイラは再帰インラインメソッドをどのように処理しますか?
インラインは単なる提案なので、私の推測はおそらくありませんが、見つけ出すことができます。
ルーチン階乗単純な再帰:ここ
function Factorial(const aNum: cardinal): cardinal;
begin
if aNum > 1 then
Result := Factorial(aNum - 1) * aNum
else
Result := 1;
end;
は、それへの呼び出しの解体である:
// fact := Factorial(5);
mov eax,$00000005
call Factorial
mov ebx,eax
、ルーチン自体の解体:今
// 9: begin
push ebx
mov ebx,eax
// 10: if aNum > 1 then
cmp ebx,$01
jbe $0040ab30
// 11: Result := Factorial(aNum - 1) * aNum
mov eax,ebx
dec eax
call Factorial
imul ebx
pop ebx
ret
// 13: Result := 1;
0040ab30: mov eax,$00000001
// 14: end;
pop ebx
ret
私たちはそれをインラインとし、何が違うかを見ますNコール:
// 21: fact := Factorial(5);
mov eax,$00000005
call Factorial
mov ebx,eax
、ルーチン自体:
// 9: begin
push ebx
mov ebx,eax
// 10: if aNum > 1 then
cmp ebx,$01
jbe $0040ab30
// 11: Result := Factorial(aNum - 1) * aNum
mov eax,ebx
dec eax
call Factorial
imul ebx
pop ebx
ret
// 13: Result := 1;
0040ab30: mov eax,$00000001
// 14: end;
pop ebx
ret
そして、彼らは両方とも私には同じように表示されますので、私は私の元の仮説に固執し、それらがサポートされていないと言うつもりです。
ところで:これはDelphiで良い答えのために、2009年
おかげです。 RE:「In Delphi 2009」Delphi 7用のObject Pascalのリファレンスを見ていましたが、明らかにインラインは長い間順方向互換性のキーワードとなっていました。 –
私は少し前にそれを見て覚えているように見えます。 –
「インライン」は、生の機械コードをどのように機能に組み込むかということでした。これで "asm"ブロックを使用するだけで、コンパイラが知らない命令が必要な場合は、DB、DW、およびDD命令でバイトを挿入します。 –