什么是malloc

malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存,且分配的大小就是程序要求的大小。

什么是malloc

一、什么是malloc

malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存,且分配的大小就是程序要求的大小。

其函数原型为void *malloc(unsigned int size);其作用是在内存的动态存储区中分配一个长度为size的连续空间。此函数的返回值是分配区域的起始地址,或者说,此函数是一个指针型函数,返回的指针指向该分配域的开头位置。

二、工作机制

malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表的功能。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的内存块连接到空闲链上。到最后,空闲链会被切成很多的小内存片段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。如果无法获得符合要求的内存块,malloc函数会返回NULL指针,因此在调用malloc动态申请内存块时,一定要进行返回值的判断。

Linux Libc6采用的机制是在free的时候试图整合相邻的碎片,使其合并成为一个较大的free空间。

延伸阅读

与new的区别

从本质上来说,malloc(Linux上具体实现可以参考man malloc,glibc通过brk()&mmap()实现)是libc里面实现的一个函数,如果在source code中没有直接或者间接include过stdlib.h,那么gcc就会报出error:‘malloc’ was not declared in this scope。如果生成了目标文件(假定动态链接malloc),如果运行平台上没有libc(Linux平台,手动指定LD_LIBRARY_PATH到一个空目录即可),或者libc中没有malloc函数,那么会在运行时(Run-time)出错。new则不然,是c++的关键字,它本身不是函数。new不依赖于头文件,c++编译器就可以把new编译成目标代码(g++4.6.3会向目标中插入_Znwm这个函数,另外,编译器还会根据参数的类型,插入相应的构造函数)。

在使用上,malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小。而 malloc 则必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针。另外有一点不能直接看出的区别是,malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。除了分配及最后释放的方法不一样以外,通过malloc或new得到指针,在其它操作上保持一致。

文章标题:什么是malloc,发布者:E.Z,转载请注明出处:https://worktile.com/kb/p/62026

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
E.ZE.Z站长
上一篇 2023年7月27日 下午9:12
下一篇 2023年7月27日 下午9:20

相关推荐

  • 敏捷开发如何应对项目风险

    敏捷开发应对项目风险的方式有持续规划和调整、短周期迭代开发、优先级排序与灵活性调整、建立风险管理机制、充分沟通和协作、持续改进和优化等。详细介绍:1、持续规划和调整,在项目开始阶段,敏捷开发团队会制定一个初步的计划,然后在项目执行过程中不断进行修订和优化,这种做法可以帮助团队更好地应对项目中的不确定性因素和变化;2、短周期迭代开发,每个迭代周期结束后等等。

    2023年10月23日
    7400
  • c2c开源系统有哪些

    常用的c2c开源系统有以下几个:1、ECSHOP电商系统;2、MAGENTO电商系统;3、V5SHOP电商系统;4、OPENCART电商系统。ECSHOP电商系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源电商系统, ECSHOP开源的电商系统最大的特色之一是功能健全。

    2023年1月6日
    32000
  • 编制进度计划用什么软件

    编制进度计划用的软件有:1、Microsoft Project;2、GanttProject;3、Smartsheet;4、Trello;5、Conclusion。Microsoft Project是目前最为流行的项目管理软件,它具有强大的功能和完善的界面设计。通过Microsoft Project…

    2023年2月27日
    66600
  • 汇编语言与机器语言的区别是什么

    汇编语言与机器语言的区别在于以下几个方面:1、效率;2、组成;3、面向类型;4、特点不同。效率是指,机器语言的执行效率高,速度快,而汇编语言的编程效率不高,属低级语言。 一、效率 机器语言:执行效率高,速度快; 汇编语言:编程效率不高,属低级语言; 高级语言:执行效率不及机器语言,但编程效率高于汇编…

    2023年2月21日
    1.5K00
  • 可编程控制器的常用编程语言有哪些

    可编程控制器的常用编程语言有:1、梯形图;2、助记符语言;3、功能块图;4、顺序功能图;5、结构化文本。梯形图是在常用的继电器与接触器逻辑控制基础上简化了符号演变而来的,具有形象、直观、实用等特点,是运用上非常多的一种PLC的编程语言。

    2023年1月9日
    57600
  • PHP 和 Java 的主要区别有哪些

    PHP和Java的主要区别有:1、技术层⾯区别;2、开发效率区别;3、开发成本区别;4、安全区别;5、访问数据库速度区别。Java是编程语⾔,功能很强⼤,分⽀众多。PHP吸收了Java等编程语⾔的优点,专注与做互联⽹领域,在web领域有得天独厚的优势。

    2023年2月7日
    38600
  • 产品管理与客户支持之间的联系是什么

    产品管理与客户支持之间的联系密切而重要。主要联系点包括:一、用户反馈收集与分析;二、产品问题解决与优化;三、功能解释与培训;四、市场与销售策略调整;五、客户满意度与忠诚度提升。通过这些方面的合作,产品管理和客户支持能共同推动产品的成功和用户体验的提升。 一、用户反馈收集与分析 客户支持团队是与用户接…

    2023年9月22日
    6700
  • 抖音极速版和抖音有什么区别

    抖音极速版与抖音的区别主要体现在以下五个方面:1、功能区别;2、使用人群;3、内容推荐;4、运行环境;5、互动性。抖音极速版更注重基础功能,目标用户群体更广,而抖音则具有更丰富的功能和更个性化的内容推荐。 一、功能区别 抖音极速版更注重核心功能,如观看、发布视频等,去除了抖音中的一些较为复杂的功能,…

    2023年6月1日
    5.0K00
  • ms办公软件是什么

    MS办公软件指的是Microsoft Office套件,由微软公司开发。它是一套包括了多个办公应用程序的集合,如Word(文字处理)、Excel(电子表格)、PowerPoint(演示文稿)、Outlook(电子邮件和日程管理)等。这些工具广泛应用于企业、教育和个人办公场合,用于创建、编辑和管理各种…

    2023年8月9日
    55200
  • 日程记录app哪个好用

    好用的日程记录app有:一、滴答清单;二、奇妙日程;三、TickTick日程管理;四、时间表;五、高效Todo;六、365日历;七、计划表;八、微约日历;九、魔女执事;十、极致办公。滴答清单是一款专注于日程安排的人气管理类应用。 一、滴答清单 一款专注于日程安排的人气管理类应用。软件功能强大,囊括了…

    2023年3月31日
    28600

发表回复

登录后才能评论
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部