IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> malloc、calloc、realloc、new等堆内存分配函数 -> 正文阅读

[C++知识库]malloc、calloc、realloc、new等堆内存分配函数

作者:recommend-item-box type_blog clearfix

在这里插入图片描述

💖 前言

malloc、calloc、realloc、new这四个函数都是从堆内存中分配内存,然后使用,但是,有所不同。

如有理解不对的地方,欢迎各位指出,大家共同交流和学习。 如有帮助,请点赞加支持! 送人玫瑰手有余香!🌹🌹🌹

💖 malloc、calloc和new的对比

先看一段代码:

void test01()
{
	int *p1 = (int *)malloc(sizeof(int)*5);//只分配内存,不初始化  
	int *p2 = (int *)calloc(5,sizeof(int));//不仅分配内存,还进行初始化
	int *p3 = new int[5];				   //只分配内存,不初始化 
	
	
	cout << "p1指针地址:" <<p1 << endl;
	cout << "p2指针地址:" << p2 << endl;
	cout << "p3指针地址:" << p3 << endl;
	
}

结果:
在这里插入图片描述
打断点,查看内存情况,如下:
在这里插入图片描述

从结果可以看出,malloc和new分配内存,不进行初始化;calloc不仅分配内存还进行初始化。

对于像类这样的非内部数据类型的对象而言,光用malloc无法满足动态对象的要求。所以,出现了new操作符,在创建对象的同时要自动执行构造函数。new操作符的底层还是malloc分配内存。malloc函数是C++/C语言的标准库函数,与free函数配合使用;new是C++ 运算符,与delete配合使用。

💖 realloc的作用

先看一段测试代码:

void test02()
{
	int *p1 = (int *)malloc(sizeof(int)*5);
	int *p2 = (int *)realloc(p1,10);
	
	cout << "p1指针地址:" <<p1 << endl;
	cout << "p2指针地址:" << p2 << endl;
	
}

结果:

p1指针地址:013758D8
p2指针地址:013758D8

而realloc是对内存进行扩容操作,不改变原有内存的值。
打断点,查看内存情况,如下:
在这里插入图片描述
从图中可以看出,新的内存起始地址和旧的内存起始地址相同,且不改变原内存地址中的值。

注意,如果传入的第一个参数为nullptr/NULL,功能等价于malloc。

💖 结论

在程序中根据场景选择不同的函数进行使用,多总结,多学习,多进步。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 10:59:30  更:2022-05-05 11:01:54 
 
开发: 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年5日历 -2024/5/21 5:05:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码