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

 

posted @ 2017-11-15 15:07  四季万花筒  阅读(185)  评论(0编辑  收藏  举报