【免杀前置课——Windows编程】十九、内存管理—堆,Windows如何管理内存数据?堆内存相关API

这篇博客探讨了Windows操作系统如何管理内存,重点介绍了堆内存管理。每个进程拥有独立的内存空间,Windows通过虚拟内存和文件映射优化资源使用。文章详细讲解了堆管理的API,如HeapCreate、HeapAlloc、HeapFree和HeapDestroy,并通过示例展示了如何在C++中使用这些API进行内存分配和释放。此外,还提到了默认堆的概念,强调了堆在管理大量小型对象时的作用及其效率问题。

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

内存管理—堆

每个进程都有自己独立的4G内存空间,高2G操作系统内核使用,低 2G用户使用。
每个进程中我们使用的都是虚拟地址,虚拟机地址到物理地址的转换由操作系统内核完成,故而我们无法在自己的进程当中访问其他进程的内存。
对于不同进程windows尽量保证同一份数据,在物理内存中只有一份﹐分别映射到多个进程中,达到节约内存的目的。
当各个进程所使用的内存数量超出物理内存大小后,操作系统还能够将物理内存中暂时用不到的数据交换到硬盘中。

Windows是如何管理内存数据的?

Windows提供了以下3种方式来管理内存数据:

  • 堆:适合用来管理大量的小型对象,使用堆管理方式可以非常方便的帮我们管理所需要的内存空间,缺点是效率低,控制不够灵活。
  • 虚拟内存:适合用于管理大型的对象数组或大型的结构数组,使用虚拟内存管理方式有丰富的内存管理接口,可以使我们更加精确的控制内存数据。
  • 文件映射:适合用于管理大型的数据流,以及在同一个机器上的不同进程间共享数据

堆在 windows中是作为一个对象来管理的,我们可以创建一个堆对象,之后在堆上分配内存,销毁内存等,c/C++中的new malloc其实也是使用的 windows 中的堆对象来分配空间的。
当windows系统创建一个进程后,会为此进程创建一个默认的堆,这个默认堆是不能够被销毁的。l

堆内存管理相关API

在这里插入图片描述

#include<Windows.h>
#include<iostream>

int main()
{
	//1、创建一个堆对象
	HANDLE hHeap = HeapCreate(0, 0, 0);
	//2、申请堆内存
	char*str = (char*)HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 10);
	strcpy_s(str, 10, "helloword");
	printf("%s\n", str);
	HeapFree(hHeap,0,str);
	HeapDestroy(hHeap);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

webfker from 0 to 1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值