Windows环境下分配内存的方法有很多,例如VirtualAlloc
, HeapAlloc
, malloc
, new
.
那么,它们之间有什么区别呢?
每个 API 都有不同的用途。每一种方法还要求您在使用完内存后使用正确的释放/释放函数。
虚拟分配
一个低级的 Windows API,提供了很多选项,但主要对处于相当特定情况的人有用。只能以更大的块(编辑:不是 4KB)分配内存。在某些情况下您需要它,但当您处于其中一种情况时您就会知道。最常见的情况之一是您必须直接与另一个进程共享内存。不要将其用于通用内存分配。使用VirtualFree
解除分配。
堆分配
分配您要求的任何大小的内存,而不是大块VirtualAlloc
. HeapAlloc
知道什么时候需要调用VirtualAlloc
并自动为您执行此操作。喜欢malloc
,但仅适用于 Windows,并提供了更多选项。适合分配一般内存块。某些 Windows API 可能要求您使用它来分配传递给它们的内存,或者使用它的同伴HeapFree
释放他们返回给你的记忆。
malloc
C 分配内存的方式。如果您使用 C 而不是 C++ 编写,并且希望您的代码能够在例如Unix计算机也一样,或者有人专门说你需要使用它。不初始化内存。适合分配一般内存块,例如HeapAlloc
。一个简单的 API。使用free
解除分配。 Visual C++ 的malloc
calls HeapAlloc
.
new
C++ 分配内存的方式。如果您使用 C++ 编写,则更喜欢这个。它还将一个或多个对象放入分配的内存中。使用delete
解除分配(或delete[]
对于数组)。视觉工作室的new
calls HeapAlloc
,然后可能会初始化对象,具体取决于您如何调用它。
在最近的 C++ 标准(C++11 及更高版本)中,如果您必须手动使用delete
,你做错了,应该使用智能指针 like unique_ptr
反而。从 C++14 开始,同样可以这样说new
(替换为诸如make_unique()
).
还有一些其他类似的功能,例如SysAllocString
您可能会被告知必须在特定情况下使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)