2016 - 2024

感恩一路有你

malloc一定要free吗 为什么malloc()和free()函数会产生很多内存碎片?

浏览量:2768 时间:2021-03-13 04:23:30 作者:admin

为什么malloc()和free()函数会产生很多内存碎片?

首先,碎片分为内部碎片和外部碎片。内部碎片是指malloc函数在块内部生成的信息,用于记录当前分配的块在实现时的信息。因此,malloc之后实际占用的内存大小通常大于所需大小(这也与内存对齐有一定关系)。外部碎片是我在楼上说的。重复使用后,会在堆中产生不连续的可用内存块,即外部碎片。Malloc和free是C/C语言的标准库函数,new/delete是C语言的操作符,它们可以应用于动态内存和自由内存。

2. 对于非内部数据类型的对象,仅使用malloc/free不能满足动态对象的要求。当一个对象被创建时,构造函数被自动执行,而在对象死亡之前,析构函数被自动执行。因为malloc/free是一个库函数而不是一个操作符,它不在编译器的控制权限内,所以不能将执行构造函数和析构函数的任务强加给malloc/free。

因此,C语言需要一个可以完成动态内存分配和初始化的new操作符,以及一个可以完成清理和释放内存的delete操作符。注意new/delete不是库函数。

4. C程序通常调用C函数,但是C程序只能使用malloc/free来管理动态内存。New是一个运算符,其状态与“”、“-”、“=”相同。。。简单来说:malloc,free是C的函数,new和delete是C的另外,new是强制类型,malloc不是,并且有很多区别。当然,new可以在声明时调用构造函数来初始化malloc。Malloc只分配空间,需要在其他地方初始化。Delete不仅释放空间,而且在释放前调用析构函数。Malloc需要指定分配空间的大小,new将自动计算

malloc一定要free吗 malloc几次free几次吗 malloc和free的用法

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。