没有合适的资源?快使用搜索试试~ 我知道了~
C语言内存分配问题(整理)
5星 · 超过95%的资源 需积分: 50 43 下载量 107 浏览量
2012-08-18
09:08:50
上传
评论 1
收藏 196KB PDF 举报
温馨提示
试读
4页
C语言内存分配相关资料整理。包括C中内存分区、内存分配方式、常见的内存错误及其对策和动态分配释放内存举例。
资源推荐
资源详情
资源评论
1、C 中内存分为四个区
栈:用来存放函数的形参和函数内的局部变量。由编译器分配空间,在函数执行完后由编译
器自动释放。
堆:用来存放由动态分配函数(如 malloc)分配的空间。是由程序员自己手动分配的,并
且必须由程序员使用 free 释放。如果忘记用 free 释放,会导致所分配的空间一直占着不放,
导致内存泄露。 堆,顺序随意。栈,后进先出(Last-In/First-Out)。
全局区(静态区):用来存放全局变量和静态变量。存在于程序的整个运行期间,是由编译
器分配和释放的。
文字常量区:例如 char *c = “123456”;则”123456”为文字常量,存放于文字常量区。也由
编译器控制分配和释放。
程序代码区:用来存放程序的二进制代码。
我查了下资料,有说分四个,有说分五个加一个程序代码区,我没查到参考的专业书籍。所
以麻烦知道的告知一下,完善一下。
2、 内存分配方式
内存分配方式有三种:
1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整
个运行期间都存在。例如全局变量,static 变量。
2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数
执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,
但是分配的内存容量有限。
3)从堆上分配,亦称动态内存分配。程序在运行的时候用 malloc 或 new 申请任意多
少的内存,程序员自己负责在何时用 free 或 delete 释放内存。动态内存的生存期由我们决
定,使用非常灵活,但问题也最多。
3、 常见的内存错误及其对策
发生内存错误是件非常麻烦的事情。编译器不能自动发现这些错误,通常是在程序运行
时才能捕捉到。而这些错误大多没有明显的症状,时隐时现,增加了改错的难度。有时用户
怒气冲冲地把你找来,程序却没有发生任何问题,你一走,错误又发作了。常见的内存错误
及其对策如下:
1) 内存分配未成功,却使用了它。
编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。常用解决办法是,在使用
内存之前检查指针是否为 NULL。如果指针 p 是函数的参数,那么在函数的入口处用
assert(p!=NULL)进行检查。如果是用 malloc 或 new 来申请内存,应该用 if(p==NULL) 或
if(p!=NULL)进行防错处理。
2)内存分配虽然成功,但是尚未初始化就引用它。
犯这种错误主要有两个起因:一是没有初始化的观念;二是误以为内存的缺省初值全为零,
导致引用初值错误(例如数组)。
内存的缺省初值究竟是什么并没有统一的标准,尽管有些时候为零值,我们宁可信其无
不可信其有。所以无论用何种方式创建数组,都别忘了赋初值,即便是赋零值也不可省略,
不要嫌麻烦。
资源评论
- yang52oi3i412013-02-27挺好的一份资料
- F599GTB2013-06-29很透彻的分析,谢谢!
齐鸣飞
- 粉丝: 118
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功