![]() |
1
19
将局部变量作为引用传递
在低级别,引用的本地
这将是JIT et(目标架构是x86):
将数组项或对象成员作为引用传递这里发生了几乎相同的事情,获取字段或元素的地址,并将指针传递给函数:
编译为(无钻孔部分):
请注意,在这种情况下,数组不必固定
,因为
framework知道中的地址
通过打开“反汇编”窗口,您可以使用Visual Studio调试器自己研究JIT编译的程序集( 调试/Windows/反汇编 ) |
![]() |
2
5
局部变量或字段的地址。在IL中,
这个
地址为32/64位,具体取决于目标体系结构。 |
![]() |
3
4
下面是C#代码中的一个简单示例:
这是生成的IL代码
注意,在这个简单的案例中,ldloca实际上只有一个区别。s 00或ldloc.0。加载本地地址或加载地址(偏移量为00) 这是最简单级别的区别(这是您在注释中要求的)——如果您加载变量的值或加载变量的地址。事情可能会很快变得复杂——如果你调用的函数不是本地的,如果你传递的变量不是本地的等等。但在基本层面上,这是不同的。 我使用linqpad进行了快速diss组装——我推荐它。 http://www.linqpad.net/ |
![]() |
4
0
它将通过引用传递局部变量,而不是为其发送新副本 |
|
user5910494 · 使用集合和引用关键字[已关闭] 9 年前 |
![]() |
Foo · ref关键字如何工作(在内存方面) 9 年前 |
![]() |
StepUp · 为什么“ref”不将更新的值分配给下一个字段? 10 年前 |
|
user3797085 · f#自定义链接列表和引用 10 年前 |