我正在“安全”代码中试验 IntPtr,将其与“不安全”模式下的完成方式进行比较。
GCHandleType.Pinned 是否类似于在不安全模式下使用“fixed”?
GCHandle pinnedArray = GCHandle.Alloc(byteArray, GCHandleType.Pinned);
IntPtr pointer = pinnedArray.AddrOfPinnedObject();
//do your stuff
pinnedArray.Free();
vs
byte[] buffer = new byte[255];
fixed (byte* p = buffer)
{
IntPtr ptr = (IntPtr)p;
// do you stuff here
}
是的,结果是一样的。区别在于用法:假设有一个外部方法异步填充缓冲区,然后在完成后调用回调。您不能传递使用固定关键字固定的缓冲区指针,因为一旦您的变量超出范围,它就会被取消固定,而外部方法仍然尝试使用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)