windows编程,进程的默认堆中分配内存的示例, VirtualFree, VirtualAlloc, VirtualQuery

本文提供了一个使用VirtualAlloc、VirtualQuery和VirtualFree在Windows编程中分配和管理内存的示例。通过创建能存储10个DWORD元素的内存区域,设置访问权限,填充元素并显示内容,最后释放内存,详细解释了这些API的用法。

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

文章内容

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

目标

原版

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

  1. Allocate the memory region (buffer) in the address space of the process using the VirtualAlloc function sufficient to store 10 elements of DWORD type. The type of memory allocation (the third parameter of the VirtualAlloc function) should be set in MEM_COMMIT | MEM_RESERVE. The type of access to the memory region (the fourth parameter of the VirtualAlloc function) must be set to PAGE_READWRITE.
  2. Get the size of the allocated memory region using the VirtualQuery function and display it on the screen.
  3. Fill the buffer elements as follows: the value of each i-th element is 4ii.
  4. Display the contents of the buffer on the screen.
  5. Free the allocated memory region using the VirtualFree function. The operation type (the third parameter of the VirtualFree function) must be set to MEM_RELEASE.

翻译版本

  1. 使用VirtualAlloc函数在进程的地址空间中分配足以存储10个DWORD类型元素的内存区域(缓冲区)。内存分配类型(VirtualAlloc函数的第三个参数)应在MEM_COMMIT | MEM_RESERVE中设置。对内存区域的访问类型(VirtualAlloc函数的第四个参数)必须设置为PAGE_READWRITE。
  2. 使用VirtualQuery函数获取分配的内存区域的大小并将其显示在屏幕上。
  3. 按如下方式填充缓冲元素:每个第i个元素的值为4 * i * i。
  4. 在屏幕上显示缓冲区的内容。
  5. 使用VirtualFree函数释放分配的内存区域。操作类型(VirtualFree函数的第三个参数)必须设置为MEM_RELEASE。

编译器

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

代码

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

using namespace std;

void task_one_part_three() {
    DWORD *p = (DWORD *) VirtualAlloc(0, 10 * sizeof(DWORD), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
    cout << VirtualQuery(p, nullptr, 0) << endl;
    for (int i = 0; i < 10; ++i) {
        *(p + i) = 4 * (i + 1) * (i + 1);
    }
    for (int i = 0; i < 10; ++i) {
        cout << *(p + i);
        if (i != 9)
            cout << " ";
    }
    VirtualFree(p, 0, MEM_RELEASE);
};

int main() {
    task_one_part_three();
}

解释

VirtualFree
VirtualAlloc
VirtualQuery

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值