我有一个包含字段的有序结构..
[StructLayout(LayoutKind.Explicit)]
public unsafe struct RunBlock_t {
[System.Runtime.InteropServices.FieldOffset(0)] public fixed byte raw[512];
}
如果我在函数中声明它并想使用指针,它可以正常工作..
{
RunBlock_t r = new RunBlock_t();
for (int i=0; i<512; i++) r.raw[i]=0;
}
但是如果我在范围之外声明变量,它需要一个固定的实现
RunBlock_t r;
{
r = new RunBlock_t();
fixed (byte* ptr = r.raw) for (int i=0; i<510; i++) ptr[i]=0;
}
为什么会有这种行为差异?
--- 已编辑 -----
只想再次声明任何其他排列都不起作用。
unsafe void foo() {
RunBlock_t r = new RunBlock_t();
fixed (byte* ptr = r.raw) for (int i = 0; i < 512; i++) ptr[i] = 0;
}
生成您不能使用固定语句来获取已经固定表达式的地址并且不会编译。
RunBlock_t r;
unsafe void foo() {
r = new RunBlock_t();
for (int i=0; i<512; i++) r.raw[i]=0;
}
生成您不能使用包含在未固定表达式中的固定大小的缓冲区。尝试使用固定语句。并且不编译。