首页 > 编程知识 正文

malloc函数,malloc函数的用法

时间:2023-05-06 08:32:20 阅读:146411 作者:1481

new与malloc区分申请的内存所在new从自由存储区上向对象动态分配内存空间,malloc函数从上动态分配内存。 自由内存空间可以是,也可以是静态存储区。 这表明,如果operator new为对象分配内存类型安全new操作符成功分配内存,则返回的是对象类型的指针。 如果类型安全的malloc内存分配成功,则返回void *,3358www.Sina.com/转换使void *指针成为我们所需的类型安全和内存安全类型安全代码在malloc尝试为其不允许的内存空间分配内存失败时方法返回值new的内存分配失败时,是否需要指定强制类型内存大小Nene 编译器根据类型信息进行自我计算,但malloc必须明确指定所需的内存大小。 是否调用构造函数/析构函数并使用new操作符分配对象内存涉及以下三个步骤:

调用operator new函数(对于数组,为operator new[] )以分配原始未命名的内存空间,该空间足够大以存储特定类型的对象。 编译器通过运行适当的构造函数生成对象并传递初始值。 对象生成完成后,返回指向该对象的指针。 使用delete操作符释放对象的内存有两个步骤。

调用对象的析构函数。 编译器调用operator delete (或operator delete[] )函数以释放内存空间。 处理数组c提供了new[]和delete[],专用于处理数组类型: 使用new[]分配的内存必须使用delete[]释放有关malloc的内存。 malloc知道是在这个内存中放置数组,还是放别的东西。 无论如何,传递原始内存,传递内存地址结束。 因此,要动态分配数组的内存,必须手动自定义数组的大小是否可以重载。 可以重载opeartor new /operator delete。 相反,malloc/free无法直观地重新分配由于重载而在malloc中分配的内存。 然后,如果在使用中发现内存不足,可以使用realloc函数重新分配内存以实现内存扩展。 realloc首先判断当前指针指向的存储器中是否有足够的连续区域,如果有,则立即扩大可分配的存储器地址,如果返回原地址指针的区域不够,则按照新指定的大小分配区域,最初还是分配原始数据

new没有这种直观的辅助设施来扩展内存。

总结特性的new/deletemalloc/free分配内存的位置自由存储堆内存分配成功的返回值完整指针void*内存分配失败的返回值返回默认抛出异常的空分配内存的大小, 编译器必须根据类型计算明确指定的字节数处理数组具有处理数组的new版本new[]用户必须在计算数组大小后分配内存的已分配内存扩展可以使用realloc轻松地相互调用查看具体的operator new/delete以实现不可调用new并分配内存时,内存不足的用户无法指定处理函数,无法重新创建分配器并在用户代码中重新加载处理函数,从而导致构造函数和析构函数

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。