动态内存管理(C语言进阶)

文章讨论了内存的静态和动态分配,全局和局部变量的存储区域。提到了当数组大小在运行时才能确定时,动态内存分配如malloc、calloc和realloc的作用。此外,还介绍了C99中的柔性数组特性,包括其优点和使用注意事项。
摘要由CSDN通过智能技术生成

全局变量——在静态区开辟内存

局部变量——在 栈区开辟内存

创建全局数组——在静态区开辟内存

创建局部数组——在栈区开辟内存

char arr[10]={0};

给了我们一个能够存放10个字节的连续内存空间,那么如果我们有5个char 类型的数据要储存,那么就要浪费剩余的内存空间,如果我们有20个 char 类型的数据要存储,那么arr数组的空间又不够我们存放数据。

但是,对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道,那么数组在编译时开辟空间的方式就不能满足了。这个时候,我们只能试试动态内存开辟。

动态内存函数介绍

1.malloc

功能: 开辟一个内存块

参数: 开辟空间的字节大小

返回类型: void * 空指针类型

2.free

当动态申请的空间不再使用的时候,就应该还给操作系统。

所以我们要将malloc申请的空间进行释放

free(p);
p=NULL;
// p被释放,所以p指向的空间没有了意义,但是那块空间的内容还在,所以p还是有能力找到这块空间,为了避免这块空间被错误使用,我们将p=NULL,赋成空指针,这样就p指针就断开与这块空间的联系。

3.calloc

 开辟一个内存中连续的空间并将空间里的每个字节初始化为0

第一个参数:元素的个数 第二个参数 :每个元素的字节大小

返回类型: void * 空指针类型

4.realloc

功能: 重新分配内存空间,调整之前开辟动态内存空间的大小

参数: 第一个参数 是之前开辟内存块的地址 ,第二个参数 是调整后空间的字节大小。

返回类型: void * 空指针类型

柔性数组

C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组的成员。

特点:

1.结构中的柔性数组成员前边必须至少有一个其他成员。

2.sizeof返回的这种结构大小不包括柔性数组的内存

3.包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。

优势:

1.方便内存释放

2.有利于访问速度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值