VirtualAlloc, HeapAlloc, malloc和new
来源:互联网 发布:工程宝软件使用说明 编辑:程序博客网 时间:2024/05/17 01:38
(1) VirtualAlloc
PVOID VirtualAlloc(PVOID pvAddress, SIZE_T dwSize, DWORD fdwAllocationType, DWORD fdwProtect)
VirtualAlloc是Windows提供的API,通常用来分配大块的内存。例如如果想在进程A和进程B之间通过共享内存的方式实现通信,可以使用该函数(这也是较常用的情况)。不要用该函数实现通常情况的内存分配。该函数的一个重要特性是可以预定指定地址和大小的虚拟内存空间。例如,希望在进程的地址空间中第50MB的地方分配内存,那么将参数 50*1024*`1024 = 52428800 传递给pvAddress,将需要的内存大小传递给dwSize。如果系统有足够大的闲置区域能满足请求,则系统会将该块区域预订下来并返回预订内存的基地址,否则返回NULL。
使用VirtualAlloc分配的内存需要使用VirtualFree来释放。
(2) HeapAlloc
HeapAlloc是Windows提供的API,在进程初始化的时候,系统会在进程的地址空间中创建1M大小的堆,称为默认堆(Default Heap),该大小为默认值,可以通过/HEAP连接器开关进行修改。用户也可以通过HeapCreate创建额外的堆,堆的使用可以更有效的进行内存管理,避免线程同步的开销以及快速的释放内存等。HeapAlloc用于从堆上分配一个内存块,如果分配成功则返回内存块的地址。HeapAlloc内部会根据请求的大小以及堆的大小来决定具体的实现,例如在需要大的内存空间时,会自动调用VirtualAlloc函数分配空间。该函数通常用来分配一般大小的内存空间,一些Windows API可能会要求使用该函数进行内存分配并传递给API参数。注意,在分配大的内存块时(例如1M或者更多)最好避免使用堆函数,建议使用VirtualAlloc。
使用HeapFree释放由HeapAlloc的分配的内存。
(3) malloc
C语言的内存分配函数,用于分配一般的内存空间,该函数分配的内存不会自动进行初始化。如果使用C语言编程,使用该函数。在Visual C++ 中,malloc函数会调用HeapAlloc函数。
malloc分配的内存由free函数释放。
(4) new
C++语言的实现方式,在Visual C++ 中,通过调用HeapAlloc实现内存分配,如果使用C++编程,建议使用new进行一般内存的分配。系统根据调用的方式决定是否对对象进行初始化。
注意: new 在C++中实际上是操作符而不是函数。
使用new 分配的内存由delete / delete[] 进行释放。
- VirtualAlloc, HeapAlloc, malloc和new
- malloc,new,heapAlloc,virtualAlloc
- VirtualAlloc HeapAlloc malloc new区别
- 虚拟内存(VirtualAlloc),堆(HeapAlloc/malloc/new)和Memory Mapped File
- (VirtualAlloc),堆(HeapAlloc/malloc/new)和Memory Mapped
- 虚拟内存(VirtualAlloc),堆(HeapAlloc/malloc/new)和Memory Mapped File
- 虚拟内存(VirtualAlloc),堆(HeapAlloc/malloc/new)和Memory Mapped File
- malloc,new,VirtualAlloc,HeapAlloc性能(速度)比较
- malloc,new,VirtualAlloc,HeapAlloc性能(速度)比较
- malloc,new,VirtualAlloc,HeapAlloc性能(速度)比较
- malloc,new,VirtualAlloc,HeapAlloc性能(速度)比较
- malloc,new,VirtualAlloc,HeapAlloc性能(速度)比较
- 内存分配:malloc, new, HeapAlloc, VirtualAlloc
- malloc,new,VirtualAlloc,HeapAlloc性能(速度)比较
- Windows系统上的VirtualAlloc, HeapAlloc和malloc,new的区别
- HeapAlloc、VirtualAlloc、GlobalAlloc和LocalAlloc、 alloc、new
- HeapAlloc,GlobalAlloc,LocalAlloc,VirtualAlloc,malloc,new的异同
- HeapAlloc,GlobalAlloc,LocalAlloc,VirtualAlloc,malloc,new的异同
- 好久没看书了,DIV+CSS,我又来了
- android JNI编译注意事项
- Windows 7+VirtualBox安装Mac OS X虚拟机全教程
- Android中Application使用,保存应用程序全局变量
- VC实现随内容改变高度的Edit Control
- VirtualAlloc, HeapAlloc, malloc和new
- iOS 自动布局修改约束
- C#日期时间格式化处理
- 【Darwin学习笔记】之QTSSReflectorModule的Describe消息处理
- error LNK2005:已经在libcpmtd.lib(xmutex.obj) 中定义
- stm32 T型加速控制步进电机
- MVC中显示JS代码格式
- redo
- javafX8初探(列表)