[内存管理(1)] 分配和释放堆内存[TZZ]

2024-10-12 04:46:47

1、打开VS2017,新建一个命名为“MemoryMgtDemo1”的“Windows控制台应用程序”项目;

2、在打开的“MemoryMgtDemo1.cpp”文件中,包含Windows.h头文竭惮蚕斗件,然后添加“获取当前进程默鹚剖蛲蛋认堆句柄”的测试代码。代码编写完毕后,调试运行程序。在弹出的控制台窗口中,可以见到“获取应用程序默认堆成功”的字样,表示GetProcessHeap函数调用成功。每个进程都有一个默认的堆内存(对应的是物理内存,并非虚拟内存中的堆内存),对于32位程序而言,其最大大小只能到4GB,超过4GB的内存将无法寻址(一维数组地址的最大值只能到unsigned long(-1));

[内存管理(1)] 分配和释放堆内存[TZZ]

3、结束控制台程序,返回到main函数中。继欹爸葛端续添加“从默认堆上分配一块内存”的测试程序,然后调试运行程序,在弹出的控制台窗口中,可以见到分配内存成功的输出信息。在这份测试代码中,通过HeapA造婷用痃lloc函数从默认堆内存上分配了一块128字节的内存,然后判断该函数是否调用成功。HeapAlloc函数的第2个参数,可以设定堆内存的访问方式(默认是同步访问,加HEAP_NO_SERIALIZE则为非同步)、是否将分配的内存清0(HEAP_ZERO_MEMORY)以及是否在内存不够是抛系统异常(HEAP_GENERATE_EXCEPTIONS);

[内存管理(1)] 分配和释放堆内存[TZZ]

4、结束控制台程序,返回到main函数中。继续添加“获取buffer1字节大小”的测试程序,然后调试运行。在弹出的控制台窗口中,可以见到获取到的buffer1大小与分配的大小一致。在调用HeapSize时,必须保证第1个参数为堆内存句柄,第3个参数为从堆内存上分配的内存块指针;

[内存管理(1)] 分配和释放堆内存[TZZ]

5、结束控制台程序,返回到main函数中。继续添加“输出buffer1中所有字节”的测试代码。这份代码中,采用for循环遍历buffer1中的所有字节内存,每输出8个字节则额外输出一个回车,切换到下一行中继续输出。代码编写完毕后,调试运行程序。在弹出的控制台窗口中,可以见到打印出的buffer1的内容,其中存放的值均为内存中的残留数据;

[内存管理(1)] 分配和释放堆内存[TZZ]

6、结束控制台程序,返回到“MemoryMgtDemo1.cpp”文件中。在main函数之上,新增一个“tx_print_heap_memory”函数,专门用于以每行8个字节输出内存中的数据内容(多增加一个参数,则可以指定每行显示的字节数);

[内存管理(1)] 分配和释放堆内存[TZZ][内存管理(1)] 分配和释放堆内存[TZZ][内存管理(1)] 分配和释放堆内存[TZZ][内存管理(1)] 分配和释放堆内存[TZZ][内存管理(1)] 分配和释放堆内存[TZZ]

11、至此,在堆上分配和释放内存的测试代码就介绍完毕了。如果您希望学到更多实用的编程知识,记得关注我哦!Enjoy!

猜你喜欢