当前位置:首页C# > 正文

C#Marshal.AllocHGlobal与Marshal.FreeHGlobal

作者:野牛程序员:2023-12-25 14:31:37C#阅读 2831

Marshal.AllocHGlobal 用于在非托管内存中分配指定大小的内存块,而 Marshal.FreeHGlobal 用于释放先前由 AllocHGlobal 分配的内存块。这两个方法通常用于与非托管代码进行交互,特别是在使用平台调用(P/Invoke)或其他需要在托管和非托管代码之间传递数据的情况下。

AllocHGlobal 的基本语法如下:

IntPtr ptr = Marshal.AllocHGlobal(size);

其中,size 是要分配的内存块的字节数。返回的 IntPtr 是指向分配的内存块的指针。

在使用完分配的内存后,应使用 FreeHGlobal 来释放它,以避免内存泄漏:

Marshal.FreeHGlobal(ptr);

请注意,使用这些方法需要小心,确保在正确的时间释放分配的内存,以防止内存泄漏和潜在的安全问题。在现代C#编程中,使用托管内存的需要相对较少,因为 .NET 框架提供了垃圾回收器来管理大部分内存。

以下是一个例子,演示了如何使用 AllocHGlobalFreeHGlobal

using System;
using System.Runtime.InteropServices;
class Program
{
    static void Main()
    {
        // 分配 100 个字节的内存
        IntPtr ptr = Marshal.AllocHGlobal(100);
        // 在此处可以使用分配的内存,例如使用 P/Invoke 调用非托管函数
        // 释放分配的内存
        Marshal.FreeHGlobal(ptr);
    }
}


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击