mir*_*lav 5 vb.net compiler-optimization
我对如何实现名称与函数相同的默认变量感兴趣.
Sum即使我不使用它总是被分配?(见case 1)Totalin 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
Run Code Online (Sandbox Code Playgroud)
当我在某处读到时,内联插入编译为小于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
Run Code Online (Sandbox Code Playgroud)
Sum2 和 Sum3 似乎产生相同的 IL。Sum1 似乎更有效,因为它将运算符的结果直接放入堆栈中。其他人必须将结果从堆栈中拉入局部变量,然后将其推回堆栈!