栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

内存之管理

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

内存之管理

内存管理

前言:为何进行内存管理?
程序运行时,需要将数据存放在内存空间中给程序使用。在软件开发中,常需要动态分配和撤销内存空间,例如对动态链表中的结点进行插入和删除,就需要对内存进行管理。

目录:
1.内存的组织方式
2.堆
3.栈

1.内存的组织方式

当我们编程好一个程序后,程序需要先转载进计算机的内存中,然后再被运行,程序被组织成4个逻辑段。
1.可执行代码
2.静态数据:可执行代码和静态数据,存储在固定的内存位置。
3.动态数据(堆):请求动态分配和释放的内存的内存池成为堆,也称为自由储存空间。
4.栈:局部数据对象、程序的参数、调用函数和被调用函数放在称为栈的内存池中。

2.堆 2.1malloc函数分配某一类型变量的内存空间

动态分配一段内存空间

int *p;              //首先定义一个整型指针来保存分配内存的地址。
p=(int*) malloc (sizeof(int));   //使用malloc分配大小为int(4个字节)的内存空间
*p=100              //使用该空间保存数据
printf("%dn",*p);//输出数据  为100

malloc函数分配内存成功后会返回一个指针,因为分配的是一个int型空间,所以返回的也要是整型指针,所以我们要用(int* )进行强制类型转换,最后将函数返回的指针赋值给指针p,就可以保存动态分配的整型空间地址了。

2.2calloc函数动态分配连续内存空间数组。

这里用calloc函数分配一个数组,然后再用malloc函数分配一个数组,使得大家比较calloc函数和malloc函数的使用。

int *p;
p=(int*) calloc (3,sizeof (int));   //使用calloc动态分配一个长度为12个字符的整型数组
int *b;
b=(int*) malloc (sizeof(int[3]));  //使用malloc动态分配一个长度为12个字符的整型数组

malloc函数:不能初始化所分配的内存空间,在动态分配完内存后,里边数据是随机的垃圾数据。

calloc函数:能初始化所分配的内存空间,在动态分配完内存后,自动初始化该内存空间为零。

2.3realloc函数改变p指针指向空间大小

realloc函数的功能是改变指针指向大小为size的空间,设定的size可以是任意的,可以比原来大,也可以比原来小,返回值是指向一个新地址的指针,如果出现错误,则返回NULL。

int *t;
double *p =(double*) malloc (sizeof (double));  //利用malloc分配一个长度为8个字节的内存空间
t=realloc(p,size(int));       //p是指向分配浮点型的空间,使用realloc函数后改变p指向的空间大小。

p是指向分配浮点型的空间,使用realloc函数后改变p指向的空间大小,其大小设置为整型,然后改变后的内存空间地址返回赋值给t整型指针。

free函数内存回收

该函数的功能可以释放由 malloc()、calloc()、realloc() 等函数申请的内存空间。

int *p;              //首先定义一个整型指针来保存分配内存的地址。
p=(int*) malloc (sizeof(int));   //使用malloc分配大小为int(4个字节)的内存空间
free (p);            //释放该内存空间,释放内存空间后,想再输出*p时,将输出一个不可意料的值,因为这个数据已经不存在了

关于内存泄漏
在使用malloc等函数分配内存后,要对其使用的free函数进行释放,因为内存不进行释放会造成内存泄漏。例如当运行大型程序时,可能某个程序要重复使用一万次10MB的内存,那将使用100GB的内存,如果用free函数,那将只需要10MB。同时也有可能会有丢失内存的情况,这个不详细展开。

栈不需要像处理堆那样,在栈中显示分配的内存。当程序调用函数和申明变量时,系统将自动分配内存。
栈是一个后进先出的压入弹出式数据结构。在程序执行时,每次向栈中压入一个对象后,栈指针向下移动一个位置。当系统从栈中弹出一个对象时,最后进栈的对象将会被弹出,然后栈指针向上移动一个位置。如果栈指针位于栈顶,说明栈是空的,如果栈在栈底,说明栈式满的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/458018.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号