我在一些 C# 应用程序中看到了 VirtualAlloc/Free windows API 方法的一些用法,我想知道在 C# 中使用这些方法的原因。
VirtualAlloc/Free 对我有什么好处,有什么想法吗?
编辑: VirtualAlloc 会比典型的 .Net “new” 语句或任何其他 .Net 内存分配方法执行得更好吗?
我在一些 C# 应用程序中看到了 VirtualAlloc/Free windows API 方法的一些用法,我想知道在 C# 中使用这些方法的原因。
VirtualAlloc/Free 对我有什么好处,有什么想法吗?
编辑: VirtualAlloc 会比典型的 .Net “new” 语句或任何其他 .Net 内存分配方法执行得更好吗?
我看到的唯一好处是单个托管对象的大小限制为 2GB。如果您使用VirtualAlloc/VirtualFree
,您可以管理更大的对象。同时,我建议您HeapAlloc/HeapFree
为此目的使用 NT 堆 ( )。
阅读有关内存状态的信息:已提交/保留/空闲。您可以在虚拟分配中使用它们。在极少数情况下,它们很有用。
需要使用 VirtualAllocEx 的一种情况是当您需要在不同进程的地址空间中分配内存时。我无法想象托管应用程序中 VirtualAllocEx 或 VirtualAlloc 的任何其他用例。