4
"What's wrong with using inline functions"및 "Can a recursive function be inline"은 Delphi 인라인 함수에 적용됩니까? 또한 델파이에서 재귀적인 인라인 함수를 처리하는 방법을 아는 사람이 있습니까?Delphi 2009 컴파일러는 재귀 인라인 메서드를 어떻게 처리합니까?
"What's wrong with using inline functions"및 "Can a recursive function be inline"은 Delphi 인라인 함수에 적용됩니까? 또한 델파이에서 재귀적인 인라인 함수를 처리하는 방법을 아는 사람이 있습니까?Delphi 2009 컴파일러는 재귀 인라인 메서드를 어떻게 처리합니까?
인라인은 단지 제안 일 뿐이므로 내 추측은 아닐 것입니다.
간단한 재귀 계승 루틴 :
// 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
여기
function Factorial(const aNum: cardinal): cardinal;
begin
if aNum > 1 then
Result := Factorial(aNum - 1) * aNum
else
Result := 1;
end;
이 호출의 분해이다 우리는 그것을
인라인으로 만들고 무엇이 다른지 확인해 봅니다. 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
그리고 그들은 모두 나에게 동일하게 나타납니다, 그래서 난 내 원래의 가설을 고수하기 위하여려고하고는 지원되지 않습니다 말한다.
BTW :이 델파이에 좋은 답변을 2009 년
감사합니다. RE : "In Delphi 2009"필자는 Delphi 7의 오브젝트 파스칼 참조 서를보고있었습니다. 오랫동안 인라인이 호환 가능한 키워드였던 것 같습니다. –
나는 그것을 얼마 전에보고 기억하는 것 같습니다. –
"인라인"은 원시 기계 코드를 사용자의 기능에 넣는 방법이었습니다. 이제 "asm"블록을 사용하고 컴파일러에서 알 수없는 명령어를 원한다면 DB, DW 및 DD 명령어가있는 바이트를 삽입합니다. –