前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WinApi学习笔记-第一次离内存这么近

WinApi学习笔记-第一次离内存这么近

作者头像
liulun
发布2022-05-09 11:11:05
2420
发布2022-05-09 11:11:05
举报
文章被收录于专栏:liulun
代码语言:javascript
复制
#include <windows.h>
#include <stdio.h>
#include <iostream>
using namespace std;
//参数1堆句柄,参数2内存地址指针
DWORD PrintHeapSize(HANDLE hHeap,LPVOID lpMem)
{
    SIZE_T dwHeapSize;
    dwHeapSize = HeapSize(hHeap,HEAP_NO_SERIALIZE,lpMem);
    if(dwHeapSize == -1)
    {
        std::cout<<"GetHeapSizeError"<<std::endl;
        return 1;
    }
    std::cout<<"内存块大小为:"<<dwHeapSize<<std::endl;
}
int main()
{
    SYSTEM_INFO si;//系统信息
    HANDLE hHeap;//堆句柄
    HANDLE hHeap2;
    HANDLE hHeap3;
    LPVOID lpMem;//内存块指针
    LPVOID lpReAlloc;//内存块大小调整后的指针
    DWORD dwHeapSize;//堆大小
    HANDLE hHeaps[24];//用于存储进程中所有堆句柄
    DWORD dwHeapNum;
    GetSystemInfo(&si);
    cout<<"系统内存分页大小:"<<si.dwPageSize<<"Byte"<<endl<<"系统内存分配粒度"<<si.dwAllocationGranularity<<endl;
    hHeap = HeapCreate(HEAP_NO_SERIALIZE,si.dwPageSize,si.dwPageSize*10);
    cout<<"创建了一个堆,初始化大小为1页,最大为10页"<<endl;
    hHeap2 = HeapCreate(HEAP_NO_SERIALIZE,0,0);
    cout<<"创建堆,初始化大小为1页,大小可变"<<endl;
    hHeap3 = GetProcessHeap();
    cout<<"获取系统已经存在的堆"<<endl;
    if(hHeap == NULL||hHeap2 == NULL||hHeap3 == NULL)
    {
        cout<<"创建内存失败"<<GetLastError()<<endl;
        return 1;
    }
    dwHeapNum = GetProcessHeaps(24,hHeaps);
    if(dwHeapNum == 0)
    {
        printf("Get All Heaps Error");
        return 1;
    }
    else
    {
        cout<<"当前一共有"<<dwHeapNum<<"个堆"<<endl;
    }
    lpMem = HeapAlloc(hHeap2,HEAP_ZERO_MEMORY,si.dwPageSize*3);
    if(lpMem==NULL)
    {
        cout<<"分配内存失败"<<GetLastError()<<endl;
        return 1;
    }
    printf("在堆上分配内存成功,起始地址为0x%x\n",lpMem);
    //调用辅助函数,打印内存块大小
    PrintHeapSize(hHeap2,lpMem);
    lpReAlloc = HeapReAlloc(hHeap2,HEAP_ZERO_MEMORY,lpMem,si.dwPageSize*11);
    printf("重新分配内存,调整内存大小为11个分页,新地址为0x%x\n",lpReAlloc);
    PrintHeapSize(hHeap2,lpReAlloc);
    CHAR A;
    cin>>A;

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2009-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档