当前位置:网站首页>C语言进阶-动态内存管理
C语言进阶-动态内存管理
2022-04-21 09:25:00 【大鹏在路上_】
目录
一.自我介绍
大家好,我是大鹏,今天带大家一起来学习C语言的动态内存管理,利用好动态内存管理,可以根据自己的需求来开辟内存空间。
二.存储器原理

三.存储器中各区的具体作用。
1.栈区:
这是存储器用来保存局部变量的部分。每当调用函数,函数的所有局部变量都在栈 上创建。它之所以叫栈是因为它看起来就像堆积而成的栈板:当进入函数时,变量会放到栈顶;离开函数时,把变量从栈顶拿走。奇怪的是,栈做起事来颠三倒四,它从存储器的顶部开始,向下增长。
2.堆区:
堆用于动态存储:程序在运行时创建一些数据, 然后使用很长一段时间,
3.数据段:
全局量位于所有函数之外,并对所有函数 可见。程序一开始运行时就会创建全局量, 你可以修改它们,
常量也在程序一开始运行时创建,但它们保存在只读存储器中。常量是一些在程序中要用到的不变量,你不能修改它们的 值,例如字符串字面值。
4.代码段:
很多操作系统都把代码放在存储器地址的低位。代码段也是只读的, 它是存储器中用来加载机器代码的部分
四.为什么要进行动态的内存管理
int a= 10;//在栈空间上开辟4个字节的空间
char arr[10]={0};//在栈空间上开辟10个字节的空间
这些内存的开辟都是静态的,不能修改的。
但是我们发现,这样的内存开辟存在两个特点:
1. 空间开辟大小是固定的。
2.数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。
可是,我们对于空间的需求,不仅仅是上述的情况,有时我们需要的空间大小需要程序运行的时候,我们才能知道,那这样对于数组大小开辟就十分不好满足了。
所以,我们就只好来试试动态内存开辟了!
五.malloc

从图片中我们不难看出,malloc是指针类型,所需要多少空间,在括号内填写版可以。

给int*类型的指针p开辟了一个40个字节堆空间,类似于 int p[10];
这样既方便,还不容易出错。
六.calloc

calloc的用法和malloc的用法相似,只是在开辟内存空间的时候,给到了开辟空间存放的初始值。
七 realloc
realloc的用法是修改开辟内存的大小。
realloc函数将p指针指向的内存空间的大小修改为自定义大小。
八 .free函数
free 函数是用来释放开辟的内存空间的,释放后指针变为野指针,所以要将指针置为NULL。
free函数用来释放动态开辟的内存。
如果参数 ptr 指向的空间不是动态开辟的,那free函数的行为是未定义的。
如果参数 ptr 是NULL指针,则函数什么事都不做。
及时释放,及时置NULL
而且不能对非动态开辟的内存空间进行释放操作。
九.总结
要避免对空指针和野指针的解应用,开辟完内存用完后要及时置为free掉,并置为NULL。
今天就讲到这里,别忘记点赞和关注!笔芯!!
版权声明
本文为[大鹏在路上_]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_53283658/article/details/124233444
边栏推荐
- 1166: rounding of real numbers (pointer topic)
- C 100 points secret script sduwh
- Controlled and uncontrolled components
- Intranet penetration - proxy penetration - rights lifting - injection - MSF Middleware - domain penetration - log clearing - learning resources
- Detailed explanation of native and H5 mixed development
- 数据库有张表,其中一个字段存的是json数据,我需要在这张表有更新的时候,解析这个字符串,然后把解析的json数据更新到另外一个表,有什么好的建议?
- My blog navigation directory (constantly sorting and updating...)
- 1155: 字符串比较 多实例
- 1149: 组合三位数之二
- 网格布局--grid
猜你喜欢

postman测试Excel文件导入导出功能

笔记0104. MySQL 高级 - 索引 - 概述

YApi基本使用(2022-04-15)

全网最全谷粒商城笔记_02、简介项目整体效果展示(2022-04-02)

响应式布局实现ghost博客首页静态页面

Penetration practice - no echo rce thinkphp5 getshell

JS prototype and prototype chain

【栈和队列】C语言简单应用 ⌊栈和队列互相实现,循环队列⌉

CC00019.CloudJenkins—————————————

Note 0104 MySQL advanced - index - Overview
随机推荐
Pipy mqtt agent (III) logging
About shardingsphere
ACTF2020 新生赛 Upload 1
1146: eat candy
1170: 最长字符串(指针专题)
1147: 查找子数组
CC00043. CloudJenkins—————————————
2017我也开始真正写CSDN博客(新浪网易转战CSDN)
Penetration practice - dig a school site vulnerability (APP vulnerability)
Integrating sdl2 with ffmpeg to realize texture rendering of random blocks
Handler异步消息传递机制(二)在子线程中创建Handler
1149: 组合三位数之二
Simulated 100 questions and simulated examination of Shanghai safety officer C certificate examination in 2022
Maya basic tutorial and basic operation explanation
1169: 大整数(指针专题)
Open3d读写pcd点云文件
1150: 数数多少个整数
深蓝-视觉slam-第六节习题
YApi基本使用(2022-04-15)
日本小哥开源“自虐神器”一夜爆火:用手柄控制自己的脸,代码自取,后果自负