假设我有这个代码:
IntPtr native_color = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (Gdk.RGBA)));
native_color 的内存是否全部初始化为零?您会认为是的,但是在某些情况下,我发现情况并非如此……那么, Marshal.AllocHGlobal() 不是确定性的吗?
假设我有这个代码:
IntPtr native_color = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (Gdk.RGBA)));
native_color 的内存是否全部初始化为零?您会认为是的,但是在某些情况下,我发现情况并非如此……那么, Marshal.AllocHGlobal() 不是确定性的吗?
从文档Marshal.AllocHGlobal Method (Int32)
当 AllocHGlobal 调用 LocalAlloc 时,它会传递一个 LMEM_FIXED 标志,这会导致分配的内存被锁定到位。此外,分配的内存不是零填充的。
如果您已经看到 Marshal.AllocHGlobal 返回的内存被零填充,那可能是因为它们已经在那里了。