New和Malloc区别
今天上课突然被问到这个问题,哈哈哈哈,一时没答上来,立马去查码住学习,主要从以下几个角度区别。
一. 从申请内存所在的位置角度
二.返回类型的安全性问题
三. 内存分配失败时的返回值
四. 是否需要指定内存的大小
具体来看:
一、从申请内存所在的位置角度
- 申请内存,这个内层的位置有哪些呢,有自由存储区和堆内存。
- new操作符是从自由存储区即free store 上为对象动态的分配内存空间,这也就是为什么常说,动态分配一个空间,new一个了。
- 自由存储区是C++基于new操作符的一个抽象概念,只要是通过new运算符进行的内存申请,内存均为自由存储区。
- malloc函数是从堆上进行动态分配的内存,注意啊,都是动态分配的啊,堆是操作系统中一块特殊的内存,用于程序的内存动态分配,c语言使用的是malloc从堆上分配内存,使用free释放已分配的内存,注意一个malloc对应一个free。
- 记得还有一个calloc,区别:malloc()函数只有一个参数,而calloc函数是有两个参数,元素数目和分配空间大小。
- 初始化时,malloc()函数不能初始化分配的内存空间,动态分配完之后,数据是随机产生的垃圾数据;
- calloc(&