함수와 동일한 이름의 기본 변수가 구현되는 방법에 관심이 있습니다.
Sum
항상 내가 그것을 사용하고 있지 않다하더라도 할당? (참조 case 1
)Total
in CASE 3
)를 선택하면 대신 사용 Sum
됩니까?다음 3 개의 동등한 경우도 컴파일 할 때 동일합니까? 아니면 어떤 것은 다른 것보다 우월합니까?
' EQUIVALENT CASES
' CASE 1
Function Sum(a As Integer, b As Integer) As Integer
Return a + b
End Function
' CASE 2
Function Sum(a As Integer, b As Integer) As Integer
Sum = a + b
End Function
' CASE 3
Function Sum(a As Integer, b As Integer) As Integer
Dim Total As Integer
Total = a + b
Return Total
End Function
어딘가에서 읽을 때 32 바이트 미만으로 컴파일하는 함수가 인라인으로 삽입됩니다. 어떤 경우에는 선택한 표기법 때문에 한계를 초과하거나 미만으로 끝날 수 있는지 궁금합니다.
함수의 이름을 Sum1, Sum2 및 Sum3으로 각각 변경 한 다음 LinqPad를 통해 실행했습니다. 생성 된 IL은 다음과 같습니다.
Sum1:
IL_0000: ldarg.1
IL_0001: ldarg.2
IL_0002: add.ovf
IL_0003: ret
Sum2:
IL_0000: ldarg.1
IL_0001: ldarg.2
IL_0002: add.ovf
IL_0003: stloc.0 // Sum2
IL_0004: ldloc.0 // Sum2
IL_0005: ret
Sum3:
IL_0000: ldarg.1
IL_0001: ldarg.2
IL_0002: add.ovf
IL_0003: stloc.1 // Total
IL_0004: ldloc.1 // Total
IL_0005: ret
Sum2와 Sum3이 동일한 IL을 생성하는 것으로 보입니다. Sum1은 연산자의 결과를 스택에 직접 배치하므로 더 효율적으로 보입니다. 다른 사람들은 결과를 스택에서 로컬 변수로 가져온 다음 스택으로 다시 밀어 넣어야합니다!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다