假设您有一个
Array array;
假设:
(1..N)
的任意数 未知 基于这些假设,我相信我们可以假设.Net框架会将其内容存储在内存中的连续区域中。如何获得指向该内存的固定指针?
类似...的工作版本。
// Doesn't work,
// gives "cannot take the address of the given expression"
fixed(object* ptr = &array.GetValue(0))
{
// ...
}
或
// Doesn't work, dimensions unknown at compile-time,
// so could be T[,], or T[,,], or T[,,,] etc. as well
T[] arr = (T[])array;
fixed(object* ptr = &T[0])
{
// ...
}
谢谢
答案 0 :(得分:4)
您可能正在寻找Marshal.UnsafeAddrOfPinnedArrayElement
(如果只需要根,则可以要求元素0);但是,这里的警告是,您需要手动进行固定(大概使用try
/ finally
)-您不能将fixed
与Array
一起使用。与简单的fixed
引用(这只是“本地”声明上的IL标志)相比,它具有更多的开销
注意:如果您始终位于元素0的位置,则AddrOfPinnedObject()
上的GCHandle
也可以为您提供这些信息,而无需执行Marshal
步骤。