gpt4 book ai didi

c# - 取一个ref参数的地址

转载 作者:行者123 更新时间:2023-11-30 12:51:28 35 4
gpt4 key购买 nike

我的代码如下

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 block 中时,GC 不会重新定位 arg。一旦在 fixed block 之外,变量就会被取消固定,因此会被 GC 重定位。

关于 static struct/class/field 将其地址固定在内存中,答案是否定的。它们与任何其他对象一样需要重新定位。不能保证本身仅仅因为它被标记为static就不会在内存中进行 future 的重定位。

static 的重要性与编译器在编译时对某个类/结构/字段 的知识和确定性有关。它与内存位置以及它们是否固定等无关。用 Eric Lippert 的话来说:

Static methods are called “static” because it can always be determined exactly, at compile time, what method will be called. That is, the method can be resolved solely by static analysis of the code.

关于c# - 取一个ref参数的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6870474/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com