今天偶然看到一个面试经验中提到malloc和new的区别,突然发现自己虽然两个都用过,但是至于区别,真的不是很明白 ,所以就仔细查了一些资料,算是对这个点彻底地了解一下,现在把我所学到的记录下来。
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
1.malloc函数初探
首先我们要知道malloc是一个函数,malloc的全称是memory allocation,中文叫动态内存分配。它的原型是:
void *malloc(int size);
说明:malloc 向系统申请分配指定size个字节的内存空间,返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。
在这里注意:
(1) void* 表示未确定类型的指针,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据(比如是char还是int或者…)
(2) 使用malloc向系统申请内存时可能分配失败。如果分配失败,则返回一个空指针(NULL)。关于分配失败的原因,有很多种,比如说空间不足就是一种。
一个对应的释放内存的函数:
void free(void *FirstByte);
该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。
至于用法,其实这两个函数用起来倒不是很难,也就是malloc()之后觉得不用了需要释放把它给free()了,举个简单例子:
char *Ptr = NULL;
Ptr = (char *)malloc(100 * sizeof(char));
if (NULL == Ptr){