文章内容
之前写的一点windows下编程的内容,每一篇都会设立几个目标(题目来自国外某大学),并写一个可运行的实例出来用于熟悉各种API,并把相关的API的官方MSDN文档附上,大伙可自行参考学习相关API用法
进程默认堆中分配内存的示例一共有三个部分,该部分为第二部分,其余部分传送如下:
(一)
(三)
目标
原版
You should implement a function, which performs the following actions:
- Create a new private process’s heap using the HeapCreate function.
- 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).
- Get the size of the allocated memory region using the HeapSize function and display it on the screen.
- 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.
- Free the allocated memory region.
- 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
翻译版本
- 使用HeapCreate函数创建新的私有进程堆。
- 在创建的堆中分配一个内存区域(缓冲区),用于存储10个DWORD类型的元素。分配的内存区域最初应初始化为零值(HEAP_zero_memory标志)。
- 使用HeapSize函数获取分配的内存区域的大小,并将其输出。
- 按如下方式填充缓冲元素:每个第i个元素的值为2ii;以及在屏幕上显示缓冲器的内容。
- 释放分配的内存区域。
- 使用函数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();
}