关于Marshal.AllocHGlobal分配的非托管内存地址与生命周期的问询
Marshal.AllocHGlobal内存分配的核心特性解答
内存地址是否会变更:是的,通过
Marshal.AllocHGlobal分配的非托管内存地址,在应用程序生命周期内不会发生改变。这类内存从进程的非托管堆中分配,不存在托管堆垃圾回收(GC)的内存移动行为,一旦分配完成,内存块的起始地址就固定下来。内存块的生命周期:可以确定的是,这块内存会一直存在,直到你主动调用
Marshal.FreeHGlobal释放它。非托管堆的内存管理完全由开发者手动控制,没有自动回收机制,只要不执行释放操作,该内存块就会持续被进程占用,且地址始终保持不变。
注意:如果忘记调用
Marshal.FreeHGlobal释放内存,会导致内存泄漏,长期运行可能耗尽系统资源。
内容的提问来源于stack exchange,提问作者viruseg
相关产品推荐
相关产品推荐

