| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C语言中动态内存的开辟 -> 正文阅读 |
|
[C++知识库]C语言中动态内存的开辟 |
目录 ·笔记 1.前言? ? ? ? 动态内存概括为在我们运行程序中可以更改的内存,C语言中提供malloc、calloc、realloc动态内存开辟的库函数,以及必不可少的free内存释放函数,它们能够使内存利用得当,甚至灵活的调整内存大小,但是也存在必然的隐患,不过是可以排查消除的。 ? ? ? ??内存五大分区 按照内存地址从高(0xffffffff)到低(0x00000000)的顺序排列,可分为5大分区:栈区 -> 堆区 -> 全局静态区 -> 常量区 -> 代码区。” ? ? ? ? 动态内存的开辟是在堆区上,我们平常大部分用的局部变量、函数参数等运行时分配、系统自动管理的是在栈区上,所以这可能对你来说是一篇温故而知新的知识,也可能对你来说是一个了如指掌的知识碎片,所以我会简单大致的概括、通俗易懂的讲解、直击重点的细节,多少会让你有些收获。 --------------------------------------------------------------------------------------------------------------------------------- 2.相关头文件
3.库函数介绍和使用首先,是关键的库函数malloc和calloc! 1.malloc框架void* malloc (size_t size);
2.calloc框架void* calloc (size_t num, size_t size);
--------------------------------------------------------------------------------------------------------------------------------- malloc和calloc异同点1.相同点? ? ? ? ? ??1.无符号整形(size_t)和size组成的含义是所要开辟内存的大小,以字节为单位 ? ? ? ? ? ? 2.返回值void*表示适用于所有类型的指针来接收,并且需要强制类型转换来适应所要接受的类型指针 ? ? ? ? ? ? 3.如果开辟成功,则返回一个指向开辟好空间的指针。 ? ? ? ? ? ? 4.如果参数 size 为0,标准是未定义的,取决于编译器。 --------------------------------------------------------------------------------------------------------------------------------- 2.不同点????????????1.malloc开辟的空间是未初始化的,calloc默认初始化为0,单位为字节 ? ? ? ? ? ? 2.calloc中num参数表示要开辟num个size大小的字节,比如calloc(3,4);表示开辟3个大小为4个字节的内存块,可以使用在数组中 ? ? ? ? ? ? 3.相比于malloc,calloc的初始化显得更胜一筹,对于使用建议是calloc --------------------------------------------------------------------------------------------------------------------------------- 3.free框架void free (void* ptr);
重点!free,free,free!再使用malloc等一系列动态内存开辟相关库函数是一定!一定! 一定要配合free来使用! --------------------------------------------------------------------------------------------------------------------------------- 4.malloc的使用综上我们来串代码尝尝鲜(非常重要哦,理论与实践相结合哦)~~~综上我们来串代码尝尝鲜(非常重要哦,理论与实践相结合哦)~~~
笔记其中知识点:perror、strerror与错误码相关 易错点:忘记判断NULL,忘记free和指针置空 free释放(返还)空间,但不会置为空指针,防止它是野指针、防止内存泄漏(不用,占用空间),需要手动置为空指针,所以记住开辟堆区空间的库函数要和free要一起使用 扩展:free不释放等程序结束也能自动回收内存空间 5.calloc的使用
---------------------------------------------------------------------------------------------------------------------------------其次,是重头戏realloc,这位更是重量级 6.realloc框架void* realloc (void* ptr, size_t size);
?1.ptr 是要调整的内存地址 7.realloc的使用代码不能停,感受它的用处
realloc在调整内存空间存在两种情况1.原有空间有足够大的空间; 2.原有空间没有足够大的空间。 --------------------------------------------------------------------------------------------------------------------------------- 4.常见的动态内存错误有下面两串代码尝尝鲜
5.C/C++程序的内存开辟
?C/C++程序内存分配的几个区域 6.柔性数组1.柔性数组的概念C99 中,结构中的最后一个元素允许是未知大小的数组,这就叫做『柔性数组』成员 2.柔性数组的特点? ? ? ? 1.结构体中最后一个成员是个数组,数组元素个数为空或者是0。 ????????2.结构中的柔性数组成员前面必须至少一个其他成员。 ????????3.sizeof 返回的这种结构大小不包括柔性数组的内存。 3.柔性数组的使用和优势代码1是柔性数组的使用
代码2是动态内存开辟的指针
柔性数组的优势之处代码1的好处是方便内存释放,一次性分配内存,例如用户使用代码2时不知道需要释放两次,代码1用户做一次free就可以把所有的内存释放掉。其次,是有利于提高访问速度,因为是内存的开辟是连续的,也有益于减少内存碎片(没有被使用的一些内存)。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 13:47:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |