zoukankan      html  css  js  c++  java
  • malloc和new的区别

    1、返回类型的区别

    new返回指定类型的指针,并且可以自动计算所需要大小。例如:

    1 int *p;
    2 p = new int; //返回类型为int* 类型(整数型指针),分配大小为sizeof(int);

    或者,如下所示:

    1 int* parr;
    2 parr = new int [100]; 
    3 //返回类型为 int* 类型(整数型指针),分配大小为 sizeof(int) * 100;

    而 malloc 则必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针

    1 int* p;
    2 p = (int *) malloc (sizeof(int)*128);
    3 //分配128个(可根据实际需要替换该数值)整型存储单元,
    4 //并将这128个连续的整型存储单元的首地址存储到指针变量p中
    5 double *pd=(double *) malloc (sizeof(double)*12);
    6 //分配12个double型存储单元,
    7 //并将首地址存储到指针变量pd中

    2、分配的内存区域

    new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。

    3、new/delete是C++的操作符,而malloc/free是C中的函数。

    4、new做两件事,一是分配内存,二是调用类的构造函数;同样,delete会调用类的析构函数和释放内存。而malloc和free只是分配和释放内存。

    5、new建立的是一个对象,而malloc分配的是一块内存;new建立的对象可以用成员函数访问,不要直接访问它的地址空间;malloc分配的是一块内存区域,用指针访问,可以在里面移动指针;new出来的指针是带有类型信息的,而malloc返回的是void指针。

    6、new/delete是保留字,不需要头文件支持;malloc/free需要头文件库函数支持。

    其余具体区别,可以参考:

    https://www.cnblogs.com/huhuuu/archive/2013/11/19/3432371.html

    http://blog.csdn.net/nie19940803/article/details/76358673

    https://www.cnblogs.com/litao-tech/p/4318424.html

  • 相关阅读:
    p3159 [CQOI2012]交换棋子
    三分法
    p2805 [NOI2009]植物大战僵尸
    p2604 [ZJOI2010]网络扩容
    p1129 [ZJOI2007]矩阵游戏
    有趣与愉快-------罗辑思维整理
    张小龙的书单
    会议
    使用CCProxy代理遇到的问题
    关于看书
  • 原文地址:https://www.cnblogs.com/seasondaily/p/7839038.html
Copyright © 2011-2022 走看看