new和malloc的区别
所属分类 c
浏览量 804
new delete是C++关键字 , malloc free 是库函数
使用new 不用指定内存块大小,根据类型信息自行计算
malloc 需要显式指定内存大小
new 返回 对象类型指针,类型严格匹配,无须类型转换
malloc 返回void * ,需要类型转换
new内存分配失败 ,抛出bac_alloc异常
malloc分配失败 返回NULL
new先调用operator new函数,申请足够的内存(通常底层使用malloc实现)
然后调用类型的构造函数,初始化成员变量,最后返回自定义类型指针
delete先调用析构函数,然后调用operator delete函数释放内存(通常底层使用free实现)
malloc free是库函数,只能动态的申请和释放内存,无法强制要求其做自定义类型对象构造和析构工作
C++允许重载new delete操作符
布局new 就不需要为对象分配内存,而是指定一个地址作为内存起始区域
new在这段内存上为对象调用构造函数完成初始化工作,并返回此地址
而malloc不允许重载
new 从自由存储区(free store)为对象动态分配内存空间
malloc从堆上动态分配内存
自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区
而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配
C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存
自由存储区不等于堆
char *p = NULL;
p = (char*)malloc(9);
printf("%p\n",p);
free(p);
// c++ free delete
p = new char[9];
printf("%p\n",p);
delete[] p;
上一篇
下一篇
指针数组 数组指针 函数指针 指针函数
康威定律
C语言字符串
堆和栈的区别
c语言中定义和声明的区别
c语言存储区域和局部变量默认初始值