AllocCoTaskMem
和 AllocHGlobal
是 Marshal 類別分配非託管記憶體的 API。
根據 .NET 9 的文件,官方說 AllocHGlobal
方法只應該在 Windows 上呼叫特定 Win32 API 的時候用到,不過到底是哪些 API 也沒講。一般要取用非託管記憶體,.NET 6 以前應該應該要使用 AllocCoTaskMem
,.NET 6 之後要使用 NativeMemory
類別。
CoTaskMem
過去主要用在 COM 接口的溝通,分配的是 COM 的 heap,而 HGlobal
分配的是程序的 heap。然而應該是 VS2012 之後,CoTaskMem
與 HGlobal
因為都使用了程序本身的 heap,因此幾乎已經沒有差異了。
總結以上,我想應該是優先使用 CoTaskMem
系列。