Marshal.AllocHGlobal()结果是否确定?

时间:2013-08-09 20:33:42

标签: c# interop pinvoke marshalling

假设我有这段代码:

IntPtr native_color = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (Gdk.RGBA)));

native_color的内存是否全部初始化为零?你会认为是的,但有一些案例我已经发现事实并非如此......那么,Marshal.AllocHGlobal()是不是确定性的?

1 个答案:

答案 0 :(得分:1)

来自文档Marshal.AllocHGlobal Method (Int32)

  

当AllocHGlobal调用LocalAlloc时,它会传递一个LMEM_FIXED标志   导致分配的内存被锁定到位。另外,分配   记忆不是零填充

如果您已经看到Marshal.AllocHGlobal返回的内存中填充了零,那可能是因为它们已经存在了。