您的位置:首页 > 其它

线程安全:分配堆与内存 API:HeapCreate HeapAlloc HeapSize HeapFree HeapDestroy

2014-05-08 00:46 453 查看
/*

* 创建指定大小的堆

*判断当前进程堆的个数
*在指定的堆上分配内存
*获取 堆分配的内存块的大小

* 释放堆分配的内存

*销毁HeapCreate 创建的堆

*/

#include<windows.h>
#include<iostream>
using namespace std;

void main()
{
//定义变量
HANDLE hHeap;   //堆句柄
SYSTEM_INFO si;  //定义结构
DWORD dwHeapNumber; //堆的数量
HANDLE hHeaps[24];  //堆句柄数组,
LPVOID lpMemory;   //指向堆分配的内存
size_t dwHeapSize; //分配的内存字节数
BOOL flag;   //  标志

//1 获取系统信息
GetSystemInfo(&si);

//2 创
4000
建一个指定大小的堆
hHeap=HeapCreate(
HEAP_NO_SERIALIZE,  //堆属性
si.dwPageSize*4 ,    //初始化字节数,上舍人页大小的整数倍。The value is rounded up to the next page boundary.
si.dwPageSize*8);   //最大分配字节数,页大小的整数倍  未0则自动增长 直到内存耗完
//判断创建是否成功
if(hHeap==NULL)
{
cout<<"create heap fail,code is : "<<GetLastError()<<endl;
return;
}

//3 判断当前进程堆的个数
dwHeapNumber=GetProcessHeaps(
24,
hHeaps);

//4 在指定的堆上分配内存
lpMemory=HeapAlloc(
hHeap,
HEAP_ZERO_MEMORY,
si.dwPageSize*2); //分配内存大小,in byte
//判断是否成功
if(lpMemory==NULL)
{
cout<<"allocate memory fail,code is : "<<GetLastError()<<endl;
return;
}

//5 获取 hHeap堆分配的 lpMemory指向的内存块的大小
dwHeapSize=HeapSize(
hHeap,      //堆句柄
HEAP_NO_SERIALIZE,
lpMemory);  //堆上分配内存指针

Sleep(10);

//6 释放堆分配的内存
flag=HeapFree(
hHeap,
HEAP_NO_SERIALIZE,
lpMemory);
if(flag==NULL)
{
cout<<"free memory fail,code is : "<<GetLastError()<<endl;
return;
}

Sleep(10);

//7 销毁HeapCreate 创建的堆
flag=HeapDestroy(hHeap);
if(flag==NULL)
{
cout<<"destroy heap fail,code is : "<<GetLastError()<<endl;
return;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线程安全 内存 api
相关文章推荐