zoukankan      html  css  js  c++  java
  • malloc/free 和 new/delete

    一、Malloc/free

    1.Malloc的原型:(#include <malloc.h>)

    Void * malloc(size_t size);   //  Void * malloc(unsigned int num_bytes);

    如果分配失败,则返回NULL,否则返回申请内存的首地址。malloc本身并不识别要申请内存的类型(返回类型为void *),只关心内存的字节数,因此必须显式的进行类型转化。

    2.Free的原型:

    Void free(void *memblock);

    如果free(p)中,p==NULL,那么无论free无论操作多少次都不会出错,如果p!=NULL,那么连续对p free 两次就会出错。

    二、New/delete  new[]/[]delete

    new operator由两步构成,operator new construct

    Delete operator 由两步构成,operator delete destroy

    三、相同:

    1.都可以进行动态内存分配和释放。

    2.freedelete都可以释放NULL指针。?

    四、不同:

    1.malloc/free C/C++语言的标准库函数,new/deleteC++的运算符。

    Operator new对应于malloc,但是operator new 可以重载,可以自定义内存分配的策略,甚至分配到非内存设备上,但是malloc不能。

    2.new能够自动分配空间大小,而malloc需要计算字节数。

    New内置了sizeof、类型转换和类型安全检查功能。

    3.New是类型安全的,malloc不是。

    Int *p=new float[2]//编译错误

    Int *p=malloc(sizeof(float)*2);//编译时无法指出错误。

    4.对于非内部数据类型的对象而言,对象在创建的同时需要自动执行构造函数,对象在消亡之前需要自动执行析构函数。New同时完成了对象的动态内存分配和初始化工作,delete同时完成了清理和释放内存的工作,而mallocfree不可以。

    5.Malloc分配失败时,返回空指针。

    Operator new分配失败时,抛出std::bad_alloc异常,但是继续提供返回0的功能。但是在使用new的入口点采用了nothrow对象。

    Student *stu=new (nothrow) student;//若分配失败返回0

    If(stu==0)  //该检查可能会成功。

    6.Malloc申请的是heap的内存空间,new申请的是free store的内存空间。

    五、联系:

    由于C++经常要调用C函数,所以C++还保留着malloc/free。但是必须要配套使用。

     

  • 相关阅读:
    [转]windows Mobile使用ActiveSync上网
    C++剪切板操作
    jdk1.8源码分析hashMap
    【杂项】VMware 虚拟机安装ubuntu 16.04教程
    【Linux命令】数据流重定向
    【ceph | 运维】crush相关命令
    【Linux命令】更改hostname
    【Linux命令】sed命令
    【Linux命令】vim基本快捷键
    【Linux命令】install
  • 原文地址:https://www.cnblogs.com/healthylife/p/5869702.html
Copyright © 2011-2022 走看看