我的代码如下
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.
About a static
结构/类/字段将其地址固定在内存中,答案是否定的。它们和任何其他对象一样会被重新定位。没有保证per se将来不会因为它被标记为而在内存中进行重定位static
.
意义static
与编译器在编译时所拥有的知识和确定性有关类/结构/字段你有什么。它与内存位置以及它们是否固定等无关。用 Eric Lippert 的话来说:
静态方法之所以被称为“静态”,是因为它总是可以在编译时准确确定将调用什么方法。也就是说,仅通过代码的静态分析就可以解决该方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)