A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 562413895@qq.co 中级黑马   /  2015-7-16 21:13  /  552 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其主要的目的是如何高校、快捷的分配,并且在适当的时候释放和回收内存资源。
2、内存分配方式
1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整    个运行期间都要存在,例如全局变量,static变量。
2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。效率高但分配的内存容量有限。
3)从堆上分配,即动态内存分配。程序在运行的时候用malloc和new申请任意大小的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由自己决定,使用灵活,但有很多问题。
3、内存分区
五大区:运行时分配的区:栈和堆;编译时分配的区:BSS段,数据段、代码段
1)BSS段:用来存放程序中未初始化的全局变量和静态变量一块内存区域。它属于静态内存分配。BSS节不包含任何数据,只是简单地维护开始和结束的地址,即总大小,已便内存区能在运行时分配并被有效地清零。
2)数据段:用来存放程序中已初始化的全局变量和静态变量的一块内存区域,它属于静态内存分配,分为只读数据段和读写数据段。还可存放字符串常量等,但一般放在只读数据段中。
3)代码段:用来存放程序执行代码的一块内存区域。
4)堆:用来存放进程运行中被分配的内存段,其大小不固定,可动态扩张或缩减。
5)栈:又称堆栈,是用户存放程序临时创建的局部变量。
4、动态内存分配
C语言中提供了三个动态内存分配的函数:malloc、callouc和realloc
1)malloc
使用方法:void *malloc(unsigned size),size是指的分配内存的字节
例:int *p=(int *)malloc(4*sizeof(int));  //在堆中申请4个int型的字节空间
其函数包含在库函数stdlib.h中,它的作用是在内存的堆区分配一个大小为size的连续空间,若分配内存成功,则返回新分配内存的首地址,否则返回NULL。所以在用时要判断内存释放分配成功。
注意:malloc函数申请的内存空间,若不赋值,是垃圾数。
2)calloc
使用方法:calloc(块数,长度),分配n块内存长度为数据类型的内存空间
例:int *p1=(int *)calloc(4,sizeof(int));  //在堆中申请4块内存长度为4的字节空间
注意:可以帮我们自动初始化为0
3)realloc
使用方法:p=realloc(p,长度),给已经存在的空间扩充大小
例:int *p=(int *)malloc(4*sizeof(int));
       p=realloc(p,40*sizeof(int));  //将p的内存空间扩充到40个int型的字节。
5、内存泄露
内存泄露:当申请的内存空间在使用完以后未释放,则造成此空间的内存一直被占用,却未使用,这就造成了内存泄露。
野指针:当定义的内存空间已经释放了,却又在使用,这种指针称为野指针
解决办法:在指针p被释放之前,先要释放堆区中的内存空间
6、free函数的使用
定义函数:void free(void *pt); //释放pt开辟的内存

1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马