没有合适的资源?快使用搜索试试~ 我知道了~
详细讲解C++内存分配的问题及C++与C分配内存的方式的不同,同时介绍在C++中分配内存的最佳方式。
资源推荐
资源详情
资源评论
第 7 章 内存管理
欢 迎 进 入 内 存 这 片 雷 区 。 伟 大 的 Bill
Gates 曾经失言:
640K ought to be enough for
everybody
— Bill Gates
1981
程序员们经常编写内存管理程序,往往
提心吊胆。如果不想触雷,唯一的解决办
法就是发现所有潜伏的地雷并且排除它们
躲是躲不了的。本章的内容比一般教科书
的要深入得多,读者需细心阅读,做到真
正地通晓内存管理。
7.1 内存分配方式
内存分配方式有三种:
(1) 从静态存储区域分配。内存在程序编译
的时候就已经分配好,这块内存在程序的
整 个 运 行 期 间 都 存 在 。 例 如 全 局 变 量 ,
static 变量。
(2) 在栈上创建。在执行函数时,函数内局
部变量的存储单元都可以在栈上创建,函
数执行结束时这些存储单元自动被释放。
栈内存分配运算内置于处理器的指令集中
效率很高,但是分配的内存容量有限。
(3) 从堆上分配,亦称动态内存分配。程序
在运行的时候用 malloc 或 new 申请任意多
少的内存,程序员自己负责在何时用 free
或 delete 释放内存。动态内存的生存期由
我们决定,使用非常灵活,但问题也最多。
只有在堆上分配的内存才需要(也必须)
我们进行释放,否则就会造成内存泄漏。
例如:
char a = 3;
char func(char b)
{
char c = 5;
char *d = new char[1];
delete [] d; d = 0;
return c;
}
此处,a 为全局变量,从静态存储区域分配
1 字节给它;b、c、d 为局部变量;b、c 的
内存在栈上分配;d 的内存在堆上分配。d
的内存需要在程序退出之前释放掉。
1.1 C++内存管理详解
1.1.1 内存分配方式
1.1.1.1 分配方式简介
在 C++中,内存分成 5 个区,他们分别是堆、栈、自
由存储区、全局/静态存储区和常量存储区。
栈,在执行函数时,函数内局部变量的存储单元都可
以在栈上创建,函数执行结束时这些存储单元自动被释放
栈内存分配运算内置于处理器的指令集中,效率很高,但
是分配的内存容量有限。
堆,就是那些由 new 分配的内存块,他们的释放编译
器不去管,由我们的应用程序去控制,一般一个 new 就要
对应一个 delete。如果程序员没有释放掉,那么在程序结束
后,操作系统会自动回收。
自由存储区,就是那些由 malloc 等分配的内存块,他
和堆是十分相似的,不过它是用 free 来结束自己的生命的。
全局/静态存储区,全局变量和静态变量被分配到同一
块内存中,在以前的 C 语言中,全局变量又分为初始化的
和未初始化的,在 C++里面没有这个区分了,他们共同占
用同一块内存区。
剩余18页未读,继续阅读
资源评论
cgfire
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功