单个数组元素的固定语句

fixed statement for a single array element

方法中的以下代码是否正确?

int[] a = { 1, 2, 3, 4, 5 };
unsafe
{
    fixed (int* p = &a[0])
    {
        p[1] = 3;
    }
}

它没有错误,但由于 a[0] 已修复而 a[1] 未明确修复,a[1].

可能有一些 GC 内存移动

这个怎么样?:

int[] a = { 1, 2, 3, 4, 5 };
unsafe
{
    fixed (int* p = &a[1])
    {
        p[0] = 3;
    }
}

您固定的变量是a。它作为单一分配进行管理。永远不会重定位单个数组元素,只会重定位整个数组。

根据您的需要,您可以考虑使用 stackalloc 来代替在堆栈而不是堆上分配内存。堆栈上的变量不受 GC 的影响,因此不需要固定。

以下都将数组arr中第一个元素的地址赋值给指针p。

fixed (double* p = arr) 

相同
fixed (double* p = &arr[0])

在你的例子中,你将第二个元素赋给了一个指针

fixed (double* p = &arr[1])

在任何情况下,阵列都会被固定并防止移动。