windows编程,进程的默认堆中分配内存的示例, HeapCreate, HeapDestroy, HeapAlloc, HeapFree, HeapSize

本文通过示例介绍如何在Windows编程中使用HeapCreate、HeapDestroy、HeapAlloc、HeapFree和HeapSize等API在进程的默认堆中分配和管理内存。详细解释了如何创建私有堆、分配内存、初始化、获取内存大小、填充缓冲区、显示内容及释放内存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章内容

之前写的一点windows下编程的内容,每一篇都会设立几个目标(题目来自国外某大学),并写一个可运行的实例出来用于熟悉各种API,并把相关的API的官方MSDN文档附上,大伙可自行参考学习相关API用法
进程默认堆中分配内存的示例一共有三个部分,该部分为第二部分,其余部分传送如下:
(一)
(三)

目标

原版

You should implement a function, which performs the following actions:

  1. Create a new private process’s heap using the HeapCreate function.
  2. Allocate a memory region (buffer) in the created heap for storing 10 elements of DWORD type. The allocated memory region should initially be initialized with zero values (HEAP_ZERO_MEMORY flag).
  3. Get the size of the allocated memory region using the HeapSize function and display it on the screen.
  4. Fill the buffer elements as follows: the value of each i-th element is 2ii; and displaying the contents of the buffer on the screen.
  5. Free the allocated memory region.
  6. Destroy the private heap created in step 1 using the function HeapDestroy.

The size of a type in C/C++ is calculated using the operator sizeof

翻译版本

  1. 使用HeapCreate函数创建新的私有进程堆。
  2. 在创建的堆中分配一个内存区域(缓冲区),用于存储10个DWORD类型的元素。分配的内存区域最初应初始化为零值(HEAP_zero_memory标志)。
  3. 使用HeapSize函数获取分配的内存区域的大小,并将其输出。
  4. 按如下方式填充缓冲元素:每个第i个元素的值为2ii;以及在屏幕上显示缓冲器的内容。
  5. 释放分配的内存区域。
  6. 使用函数HeapDestroy销毁步骤1中创建的私有堆。

编译器

visual studio2013 ,不同版本有细微差异,不过都是小修即可完整运行

代码

#include<iostream>
#include<windows.h>

using namespace std;

void task_one_part_two() {
    HANDLE hHeap;
    hHeap = HeapCreate(0, 0, 0);
    DWORD *p = (DWORD *) HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 10 * sizeof(DWORD));
    cout << HeapSize(hHeap, 0, p) << endl;
    for (int i = 0; i < 10; ++i) {
        *(p + i) = 2 * (i + 1) * (i + 1);
    }
    for (int i = 0; i < 10; ++i) {
        cout << *(p + i);
        if (i != 9)
            cout << " ";
    }
    HeapFree(hHeap, 0, p);
    HeapDestroy(hHeap);
};

int main() {
    task_one_part_two();
}

解释

HeapCreate
HeapDestroy
HeapAlloc
HeapFree
HeapSize

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值