C++ 内存管理

本文介绍了C++内存管理的三个方面:对内分配、虚拟内存和内存的使用,重点关注静态存储区、栈区和堆区的区别。栈区由编译器自动管理,空间有限,而堆区需要程序员手动管理,可能存在内存碎片。静态存储区存储全局变量和静态变量。文章通过实例探讨了三者之间的差异,并强调了避免内存越界的重要性。
摘要由CSDN通过智能技术生成

关于C++的内存管理,先还是要上基础

对内分配

就32位操作系统来讲,其最大寻址空间为2^32 = 4294967296(bit)= 4(GB)左右
而4GB不会全部放到进程使用,大概有2GB使用空间(低端地址0X00000000~0X7FFFFFFF),而另外2GB(高端地址0X80000000~0XFFFFFFFF)会留给操作系统内核代码使用。

在Windows和Linux平台上,一些动态链接库(Windows的dll,Linux的so)以及ocx(包含ActiveX控制的库)控件等,由于是垮进程服务的,一般也在高2GB内存空间运行。

char szBuffer[2*1024*1024*1024];

由于在实际运行时,程序还有代码段、临时变量段,动态内存申请等,实际上是不可能用到上述那么大的数组的。

每个进程都能看到自己的2GB内存以及系统的2GB内存,但是不同进程之间是无法彼此看到对方的。当然,操作系统在底层做了很多工作,比如磁盘上的虚拟内存交换,不同内存块动态映射等等。

虚拟内存

虚拟内存的基本思想是:用廉价但缓慢的磁盘来扩充快速但昂贵的内存。在一定时刻,程序实际需要使用的虚拟内存区段的内容就被载入物理内存中。当物理内存中的数据有一段时间未被使用,它们就可能被转移到硬盘中,节省下来的物理内存控件用于载入需要使用的其他数据。

在进程执行过程中,操作系统负责具体细节,使每个进程都以为自己拥有整个地址空间的独家访问权。这个幻觉是通过“虚拟内存”实现的。所有进程共享机器的物理内存,当内存使用完时就用磁盘保存数据。在进程运行时,数据在磁盘和内存之间来回移动。内存管理硬件负责把虚拟地址翻译为物理地址,并让一个进程始终运行于系统的真正内存中,应用程序员只看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值