のMSDNドキュメントからMarshal.AllocHGlobal
:
AllocHGlobal は、Marshal クラスの 2 つのメモリ割り当てメソッドの 1 つです。このメソッドは、Kernel32.dll から Win32 LocalAlloc 関数を公開します。
ローカルヒープではなくグローバルヒープにメモリを割り当てる GlobalAlloc API があることを考えると、このメソッドの名前は誤解を招きやすいのではないでしょうか?
AllocHGlobal
ではなく、名前を付ける理由はありましたAllocHLocal
か?
更新: Simon はコメントで、Windows にはグローバル ヒープのようなものはもはや存在せず、APIGlobalAlloc
とLocalAlloc
API は従来の目的のためだけに残っていると指摘しています。最近では、GlobalAlloc
API は のラッパーにすぎませんLocalAlloc
。
これは、API がまったく呼び出さGlobalAlloc
れない理由を説明していますが、API がAllocHGlobal
グローバル ヒープを使用しない (できない) 場合に名前が付けられた理由も説明していませんGlobalAlloc
。16 ビットのサポートが廃止された後の .NET 2.0 まで導入されなかったため、この名前付けはおそらく従来の理由によるものではありません。では、疑問が残ります。なぜMarshal.AllocHGlobal
、誤解を招く名前が付けられているのでしょうか。