来自 MSDN 文档Marshal.AllocHGlobal
:
AllocHGlobal 是 Marshal 类中的两种内存分配方法之一。此方法从 Kernel32.dll 公开 Win32 LocalAlloc 函数。
考虑到有一个 GlobalAlloc API 在全局堆上分配内存,而不是在本地堆上,这个方法的名称是不是很容易产生误导?
命名它是有原因的AllocHGlobal
,而不是AllocHLocal
?
更新: Simon 在评论中指出,Windows 中不再有全局堆之类的东西,GlobalAlloc
并且LocalAlloc
API 仅用于遗留目的。如今,GlobalAlloc
API 只不过是LocalAlloc
.
这解释了为什么 API 根本不调用GlobalAlloc
,但没有解释为什么 API 在AllocHGlobal
不(不能)使用全局堆时命名,甚至不调用GlobalAlloc
. 命名不可能是出于遗留原因,因为它直到 .NET 2.0 才引入,在 16 位支持被删除之后。所以,问题仍然存在:为什么会Marshal.AllocHGlobal
如此误导性地命名?