malloc 和 new

这篇具有很好参考价值的文章主要介绍了malloc 和 new。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

malloc(c)与new(c++)都是分配空间的函数
new一个对象ha~ ha~

定义

malloc动态内存分配函数,用于申请一块连续的指定大小的内存块区域以void类型返回分配的内存区域地址。
s
malloc函数是一种分配长度为num_bytes字节的内存块的函数,可以向系统申请分配指定size个字节的内存空间。malloc的全称是memory allocation(动态内存分配),当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。返回类型是 void
类型。void
表示未确定类型的指针。C,C++规定,void
类型可以通过类型转换强制转换为任何其它类型的指针**
s
malloc函数原型

void *malloc(int size);

s
malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void 类型。void 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。**

malloc的头文件

s

//使用前要申明:#include <stdlib.h>或者#include <malloc.h>
#include<malloc.h>

s
malloc函数返回值
如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
s
malloc与new的区别
从函数声明上可以看出。malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小。而 malloc 则必须由我们计算要字节数,并且在返回后强行转换为实际类型的指针。 
s

#include<bits/stdc++.h>
using namespace std;
int main(){
	int *p=new int[N];                     //new自动计算大小
	int *str=(int *)malloc(sizeof(int));  //自己计算大小 
	return 0; 
} 
// malloc为数组分配空间 
#include<bits/stdc++.h>
using namespace std;
int main(){
	int n = 10;
	int *arr=(int *)malloc(sizeof(int)*n);
	return 0;
} 

s
*malloc注意事项
关于malloc所开辟空间类型:malloc只开辟空间,不进行类型检查,只是在使用的时候进行类型的强转。
s
mallo函数返回的实际是一个无类型指针,必须在其前面加上指针类型强制转换才可以使用
指针自身 = (指针类型
)malloc(sizeof(指针类型)*数据数量)
s
在使用malloc函数之前我们一定要计算字节数,malloc开辟的是用户所需求的字节数大小的空间。
s
1申请了内存空间后,必须检查是否分配成功。
2当不需要再使用申请的内存时,记得释放;释放后应该把指向这块内存的指针指向NULL,防止程序后面不小心使用了它。
3这两个函数应该是配对。如果申请后不释放就是内存泄露;如果无故释放那就是什么也没有做。释放只能一次,如果释放两次及两次以上会
出现错误(释放空指针例外,释放空指针其实也等于啥也没做,所以释放空指针释放多少次都没有问题)。
4虽然malloc()函数的类型是(void ),任何类型的指针都可以转换成(void ),但是最好还是在前面进行强制类型转换,因为这样可以躲过一些编译器的检查。

free头文件

s

#include<stdlib.h>

函数声明:

void free(void *block);

free函数在释放空间之后,把内存前的标志变为0,且为了防止数据泄露,它会把所释放的空间用cd进行填充。

总结

malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。

malloc工作机制

malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。

调用free函数时,它将用户释放的内存块连接到空闲链上。到最后,空闲链会被切成很多的小内存片段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。如果无法获得符合要求的内存块,malloc函数会返回NULL指针,因此在调用malloc动态申请内存块时,一定要进行返回值的判断。Linux Libc6采用的机制是在free的时候试图整合相邻的碎片,使其合并成为一个较大的free空间。文章来源地址https://www.toymoban.com/news/detail-501589.html

到了这里,关于malloc 和 new的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • malloc函数用法

    m a l l o c malloc ma ll oc 函数是一种分配长度为num_bytes字节的内存块的函数,可以向系统申请分配指定size个字节的内存空间。malloc的全称是memory allocation(动态内存分配),当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。返回类型是 v

    2024年02月04日
    浏览(37)
  • C语言malloc函数详解(通俗易懂)

    简单来说,malloc函数的作用是开辟一个空间来给你使用; 他包含在标准库中 返回值是一个void*(可以简单理解为一个没人知道它是什么类型的指针),一般我们都要对结果进行类型转换; 我们通过malloc申请的空间是以字节为单位的,如malloc(1*1024*1024)则申请了1MB的空间; 如果

    2023年04月08日
    浏览(35)
  • 动态内存函数malloc,calloc,realloc详解

    🍍个人主页🍍:🔜勇敢的小牛儿🚩 🔱推荐专栏🔱:C语言知识点 ⚠️座右铭⚠️: 敢于尝试才有机会 🐒今日鸡汤🐒: 出色一点 从能力到容貌 目录 思维导图: 一,malloc : 1.1:malloc函数简介: 1.2:malloc函数的使用:  代码: 二,calloc函数 2.1calloc函数简介: 2.2calloc函数

    2024年02月04日
    浏览(34)
  • calloc、malloc、realloc函数的区别及用法

    三者都是分配内存,都是stdlib.h库里的函数,但是也存在一些差异。 (1)malloc函数。其原型void *malloc(unsigned int num_bytes); num_byte为要申请的空间大小,需要我们手动的去计算,如int *p = (int )malloc(20 sizeof(int)),如果编译器默认int为4字节存储的话,那么计算结果是80Byte,一次申请

    2024年02月08日
    浏览(35)
  • 观察者模式——对象间的联动

    在软件系统中,有些对象之间也存在类似交通信号灯和汽车之间的关系。一个对象的状态或行为的变化将导致其他对象的状态或行为也发生改变,它们之间将产生联动,正所谓“触一而牵百发”。为了更好地描述对象之间存在的这种一对多(包括一对一)的联动,观察者模式

    2024年02月14日
    浏览(34)
  • C语言中灵活多变的动态内存,malloc函数 && free函数&& calloc函数 && realloc函数

    铁子们好啊!今天阿辉给大家讲一下C语言里面特别重要的一块知识——动态内存管理,为什么说它重要呢?相信大家在使用数组时都遇到过数字开辟空间太大或者太小的情况,这是很尴尬的因为数组空间一旦确定就难以扩大或者缩小。而今天的动态内存管理将帮我们很好的解

    2024年02月03日
    浏览(28)
  • C语言使用malloc函数模拟开辟二维数组(带分析)

    🌟 个人主页 :古德猫宁- 当我们使用malloc函数来模拟创建一个二维数组时,我们需要理解二维数组在内存中是如何存储的。在C语言中,二维数组实际上是一维数组的数组。也就是说,一个二维数组可以被看作是一个包含多个一维数组的数组 考虑一个row行、cols列的二维整数

    2024年02月02日
    浏览(31)
  • C语言——动态内存函数(malloc、calloc、realloc、free)

    在C语言中,动态内存函数是块重要的知识点。以往,我们开辟空间都是固定得,数组编译结束后就不能继续给它开辟空间了,开辟的空间满了,就不能在开辟空间了(就是不能在添加数据了)。学习本文章,我们就可以解决这个问题,向内存申请空间,满啦可以继续申请空间

    2024年02月13日
    浏览(34)
  • 篇十四:观察者模式:对象间的通知与更新

    篇十四: “观察者模式:对象间的通知与更新” 设计模式是软件开发中的重要知识,观察者模式(Observer Pattern)是一种行为型设计模式,用于在对象间建立一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都将得到通知并自动更新。本文将介绍观察

    2024年02月14日
    浏览(28)
  • 【嵌入式软件C编程】主函数free子函数malloc地址的两种方式以及注意事项

    本文档主要记录嵌入式C语言在子函数中应用malloc函数的方式,在实际项目中内存管理特别重要 一般在主函数中(main)使用malloc函数,然后在通过free函数进行释放内存,但有时候如果必须在子函数长调用malloc函数该怎样进行内存释放呢? 📋 个人简介 💖 作者简介:大家好,

    2024年02月09日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包