取ref形参的地址
本文关键字:地址 形参 ref | 更新日期: 2023-09-27 18:03:49
我的代码如下
class MyClass
{
static int iField = 42;
static void Test(ref int arg)
{
unsafe
{
fixed(void* pField = &iField)
fixed(void* pArg = &arg)
{
Console.WriteLine ("{0},{1}",(int)pArg,(int)pField);
//output: 165451772,165451772
}
}
}
static void Main()
{
Test(ref iField);
}
}
我想知道ref参数的地址是否像上面测试中显示的那样可靠
据我所知,是的,当您在fixed
块中时,GC将不会重新定位arg
。一旦在fixed
块之外,变量将被解除固定,从而受到GC的重定位。
关于static
结构/类/字段保持它的地址固定在内存中,答案是否定的。它们可以像其他物体一样重新定位。不能保证本身将来不会因为标记为static
而在内存中重新定位。
static
的重要性与编译器在编译时对某个类/结构/字段的了解和确定性有关。它与内存位置以及它们是否固定等无关。用Eric Lippert的话来说:
静态方法之所以被称为"静态",是因为在编译时总是可以准确地确定将调用哪个方法。也就是说,方法只能通过对代码的静态分析来解析。