Pol*_*ial 5 c# winapi memory-management marshalling
从MSDN文档Marshal.AllocHGlobal:
AllocHGlobal是Marshal类中的两种内存分配方法之一.此方法从Kernel32.dll公开Win32 LocalAlloc函数.
考虑到有一个GlobalAlloc API在全局堆上而不是本地堆上分配内存,这个方法的名称不是误导吗?
是否有理由将其命名AllocHGlobal,而不是AllocHLocal?
更新: Simon在评论中指出,Windows中不再存在全局堆这样的东西,并且这些GlobalAlloc和LocalAllocAPI仅用于遗留目的.这些天,GlobalAllocAPI不再是一个包装器了LocalAlloc.
这解释了为什么API根本不调用GlobalAlloc,但它没有解释为什么API在AllocHGlobal没有(不能)使用全局堆时也被命名,甚至也没有调用GlobalAlloc.命名不可能是出于遗留原因,因为在删除16位支持之后,直到.NET 2.0才会引入命名.所以,问题仍然存在:为什么Marshal.AllocHGlobal如此误导性地命名?