ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

动态内存管理的核心知识点

2021-11-07 23:06:40  阅读:200  来源: 互联网

标签:知识点 malloc 核心 申请 内存空间 释放 地址 内存 动态内存


动态内存管理?如何申请一个内存,如何释放一个内存.

咋们以前,是通过创建变量的方式来申请内存的,啥时候释放内存,就得看变量是啥样的变量了.内存释放的时机,其实是不太灵活的~

如果是全局变量,就跟随程序释放,如果是静态变量,也跟随程序释放,如果是局部变量,也就跟随代码块释放.

1.动态内存管理,能够更灵活的决定申请时机和释放时机~

2.动态内存管理可以在运行时决定内存申请的大小~

动态内存管理主要涉及到的几个关键库函数:

malloc,free,calloc,realloc

malloc 

malloc功能就是能够在系统中申请到一块连续的内存空间.

 

size表示字节数,size_t类型,不能是负数,同样,不能给size传个0(未定义行为)

void*就表示这个申请到的连续内存空间的起始地址,这个内存空间的大小不知道,就知道这个地址,使用malloc的时候,往往需要根据实际情况,把得到的void*强制类型换成其他咋们需要的类型的指针

malloc得到的是连续的内存空间!!!因此malloc的返回值一定要做检查.通过if或者assert判断一下malloc的返回值是不是空

malloc申请到的内存,是啥时候释放呐?

1.程序如果运行结束,就跟随程序一起释放了.

1.程序没结束的时候,手动调用free,也就释放了.

free用法比较简单~

 

这个参数指的就是malloc返回值的地址,如果是其他的地址(不是malloc返回的地址,比如随便搞个地址,)此时都是未定义行为.

如果一个程序,光是malloc了,但是没有free会造成内存泄漏.

calloc也是动态的申请一个连续的内存空间~

 

calloc返回值仍然是一个连续内存空间的起始位置.

calloc申请到的内存,会被初始化为全0.

malloc申请到的内存,则不会初始化,内存上的值都是随机值.

realloc是要和free,以及和malloc/calloc搭配使用的,realloc的功能是针对动态申请的内存,进行扩容!

 ptr就是一个动态申请到的内存空间~,size扩容后的内存空间,扩容之后的内存地址了,这个地址和之前的地址,可能相同也可能不相同,主要看这个扩容过程,是否触发了内存搬运.

动态申请到的内存,和普通的变量相比,所在在内存区域是不一样的~~

 

标签:知识点,malloc,核心,申请,内存空间,释放,地址,内存,动态内存
来源: https://blog.csdn.net/qq_52637200/article/details/121198187

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有