【内存管理】

本文介绍了内存管理的重要性,包括代码区、全局区、栈区和堆区四个内存区间。动态内存的申请通过malloc函数,释放则使用free函数,强调了避免内存泄漏和溢出的重要性。内存泄漏是未释放已使用的内存,而内存溢出则是程序请求超过可用内存导致的问题。
摘要由CSDN通过智能技术生成

目录

一.内存管理

1.内存管理的意义

2.四个内存区间

3.代码示例:

二.动态内存的申请和释放

1.动态内存分配

2.动态内存的释放

3.代码示例

三.内存泄漏和溢出


一.内存管理

1.内存管理的意义

不同区域存放的数据,赋予不同的生命周期,带来了更大的灵活编程;

2.四个内存区间

 ⭕代码区: 存放函数体的二进制代码,由操作系统进行管理(cpu执行的机器指令,共享只读);

 ⭕全局区(全局静态区): 存放全局变量和静态变量以及常量(包含const);

 ⭕栈区: 由编译器自动分配释放,存放函教的参数值,局部变量等;

 ⭕堆区: 由程序员分配和释放,若程序员不释放程序结束时由操作系统回收;

3.代码示例:

此时data 为已经初始化过的数据和字符串常量,共有280字节

bss为为初始化过的数据有8字节

 

接下来把a初始化,就可以看到已经初始化过的data数据就是284字节了,未初始化bss数据就变成了4字节 

二.动态内存的申请和释放

1.动态内存分配

申请空间

#include <stdlib.h>

void *malloc(size_t size);

参数:所需申请空间的大小

返回值:成功 申请空间的首地址                

                失败 NULL

2.动态内存的释放

 释放空间

#include <stdlib.h>

void free(void *ptr);

参数:malloc的地址

返回值:无

3.代码示例

⭕malloc返回申请成功的地址的首地址,然后把这个地址给到a; 

动态申请空间要手动释放;

⭕ 申请到的内存是一块连续的内存空间,可能实际的空间比申请到的空间大,若申请失败会返回NULL,尽量在代码中加入申请失败的提醒;

⭕申请的空间不能多次释放;

⭕使用free函数释放空间时必须提供释放空间的首地址,且malloc和free配对使用,避免内存泄漏

三.内存泄漏和溢出

内存泄漏(memory leak):

是指申请的内存空间使用完毕之后未回收。 一次内存泄露危害可以忽略,但若一直泄漏,无论有多少内存,迟早都会被占用光,最终导致程序crash。(因此,开发中我们要尽量避免内存泄漏的出现)

内存溢出(out of memory):

是指程序在申请内存时,没有足够的内存空间供其使用。 通俗理解就是内存不够用了,通常在运行大型应用或游戏时,应用或游戏所需要的内存远远超出了你主机内安装的内存所承受大小,就叫内存溢出。最终导致机器重启或者程序crash。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放牛的守护神_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值