C++ malloc new 的区别

1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。 malloc实现了在堆内存管理中进行按需分配的机制,但是它不提供在C++中对像构造的支持;  new 则是一个 在C++中同时完成堆内存按需分配支持和对像构造功能的运算符,由于c++中的运算符功能较C中的运算符在意义上作了扩展的,可以理解成函数调用 

2,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。 

3,因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。

4,C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数;而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数。

5、new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的。而malloc返回的都是void指针。
时间: 2024-10-20 08:12:45

C++ malloc new 的区别的相关文章

malloc()与calloc区别

1.分配内存空间函数malloc 调用形式: (类型说明符*) malloc (size) 功能:在内存的动态存储区中分配一块长度为"size" 字节的连续区域.函数的返回值为该区域的首地址. “类型说明符”表示把该区域用于何种数据类型.(类型说明符*)表示把返回值强制转换为该类型指针.“size”是一个无符号数.例如: pc=(char *) malloc (100); 表示分配100个字节的内存空间,并强制转换为字符数组类型, 函数的返回值为指向该字符数组的指针, 把该指针赋予指针

new/delete与malloc/free的区别

参考: https://blog.csdn.net/u013485792/article/details/51329541 https://www.cnblogs.com/lyl-312/p/5528892.html http://www.cnblogs.com/QG-whz/p/5140930.html https://blog.csdn.net/gukesdo/article/details/7506155 本文在写作中参考了上述文章,特此感谢! [导语] 之前对new和delete,mal

new/delete 与 malloc/free的区别

一.概述 在C++中,申请动态内存与释放动态内存用new/delete 与 malloc/free都可以,而且他们的存储方式相同,new/malloc申请的动态内存位于堆中,无法被操作系统自动回收,需要对应的delete也free释放空间. malloc/free是C/C++语言的标准库函数,在C语言中需要头文件#include<stdlib.h>的支持.而new/delete是C++的运算符.对于类对象而言,malloc/free无法满足动态对象的要求,对象要求在创建的同时自动执行构造函数,

C++ 内存、new与malloc分配内存区别?

一关于内存 1.内存分配方式 内存分配方式有三种: (1)从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. (2)在栈上创建.在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. (3) 从堆上分配,亦称动态内存分配.程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或de

new delete和malloc free的区别

部分内容摘自:http://www.52rd.com/bbs/Archive_Thread.asp?SID=209143&TID=3&WebShieldDRSessionVerify=QWlrR3KW8IElo27YO6zv 一.他们分别是什么 new和delete是c++中的操作符,malloc和free是c/c++的标准库函数. 在使用完分配的内存时,要及时用delete和free进行内存释放,避免内存泄漏. 二.他们之间的区别 1.malloc的原型为:void * malloc(s

malloc()与 alloc()区别 (转)

malloc()与 alloc() C语言跟内存分配方式 (1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. (2) 在栈上创建.在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. (3)从堆上分配,亦称动态内存分配.程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用fre

realloc,malloc,calloc的区别

三个函数的申明分别是: void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(size_t numElements, size_t sizeOfElement); 都在stdlib.h函数库内 它们的返回值都是请求系统分配的地址,如果请求失败就返回NULL malloc用于申请一段新的地址,参数size为需要内存空间的长度,如: char* p; p=(char*)malloc(

new/delete 和malloc/free 的区别一般汇总

一.基本概念 malloc/free: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针.如果分配失败,则返回一个空指针(NULL). void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由. 2.内存操作: malloc函数的参数是接受需要分配的内存字节数,如果内存能够满足请求量,那么将会返回:指向被分

new/delete、malloc/free 的区别

相同点 1.都可以动态的申请或释放内存 2.存储方式相同,动态申请的内存都存放在堆中,无法自动释放,要调用对应的delete和free 区别 1.new能自行的计算需要分配的空间,malloc需要手动计算字节数 int *p1 = new int[10]; int *p2 = (int*)malloc(10*sizeof(int)); 2.new和delete直接带具体类型的指针,malloc和free返回void类型的指针 void *p2 = malloc(10*sizeof(int));

c++ new 与malloc有什么区别

转自:https://www.cnblogs.com/ywliao/articles/8116622.html new与malloc的10点区别 1. 申请的内存所在位置 new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存.自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区.而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分