AllocCoTaskMemAllocHGlobalMarshal 類別分配非託管記憶體的 API。

根據 .NET 9 的文件,官方說 AllocHGlobal 方法只應該在 Windows 上呼叫特定 Win32 API 的時候用到,不過到底是哪些 API 也沒講。一般要取用非託管記憶體,.NET 6 以前應該應該要使用 AllocCoTaskMem,.NET 6 之後要使用 NativeMemory 類別。

CoTaskMem 過去主要用在 COM 接口的溝通,分配的是 COM 的 heap,而 HGlobal 分配的是程序的 heap。然而應該是 VS2012 之後,CoTaskMemHGlobal 因為都使用了程序本身的 heap,因此幾乎已經沒有差異了。

總結以上,我想應該是優先使用 CoTaskMem 系列。

References