C++内存分配new和malloc的区别

这里有一篇讲的很详细new和malloc的区别

总结一下:

1.new/delete是操作符,malloc/free是函数

2.malloc分配内存需指定大小,且只能是一般数据类型,分配成功返回void*,需要强制类型转换,分配失败返回NULL,需手动检查是否分配成功;new分配内存无需指定大小,可以为类对象,分配成功返回特定类型指针,分配失败抛出异常。

3.new分配内存,一般类型可以指定初始化,未初始化的保留其在内存中的原值;对象会调用其默认构造函数,也可以指定构造函数。

4.delete对象的指针时会调用其析构函数,而free则无法调用;delete指针之后一般还保留其原来的内存地址,再次使用出错,所以delete完之后需要赋值为NULL。

5.C++保留malloc的原因是C++有时需要使用C编写的库,而C中只能使用malloc,如果使用new会出现错误。

时间: 2024-10-07 07:36:25

C++内存分配new和malloc的区别的相关文章

C语言内存分配函数malloc——————【Badboy】

C语言中经常使用的内存分配函数有malloc.calloc和realloc等三个,当中.最经常使用的肯定是malloc,这里简单说一下这三者的差别和联系. 1.声明 这三个函数都在stdlib.h库文件里,声明例如以下: void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(size_t numElements, size_t sizeOfElement); 它们的功能大致类似,

C/C++内存分配

一.      预备知识—程序的内存分配: 一个由C/C++编译的程序占用的内存分为以下几个部分:1.栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.2.堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收.注意它与数据结构中的堆是两回事,分配方式倒是类似于链表.3.全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态

memcached学习——memcached的内存分配机制Slab Allocation、内存使用机制LRU、常用监控记录(四)

内存分配机制Slab Allocation 本文参考博客:https://my.oschina.net/bieber/blog/505458 Memcached的内存分配是以slabs为单位的,会根据初始chunk大小.增长因子.存储数据的大小实际划分出多个不同的slabs class,slab class中包含若干个等大小的trunk和一个固定48byte的item信息.trunk是按页存储的,每一页成为一个page(默认1M). 1.slabs.slab class.page三者关系: sl

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

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

内存分配(malloc,new,VirtualAlloc,HeapAlloc,GlobalAlloc,LocalAlloc)区别与注意

malloc()头文件:#include <malloc.h> 或 #include <alloc.h> (注意:alloc.h 与 malloc.h 的内容是完全一致的.)功能:分配长度为num_bytes字节的内存块说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL.当内存不再使用时,应使用free()函数将内存块释放. C运行库中的动态内存分配函数,主要用于ANSI C(C语言的标准)程序中,是标准库函数.WINDOWS程序基本不再使用这种方法进行内存操作,

内存分配及堆与栈的区别

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

C:malloc/calloc/realloc/alloca内存分配函数

原文地址:http://www.cnblogs.com/3me-linux/p/3962152.html calloc(), malloc(), realloc(), free(),alloca() 内存区域可以分为栈.堆.静态存储区和常量存储区,局部变量,函数形参,临时变量都是在栈上获得内存的,它们获取的方式都是由编译器自动执行的. 利用指针,我们可以像汇编语言一样处理内存地址,C 标准函数库提供了许多函数来实现对堆上内存管理,其中包括:malloc函数,free函数,calloc函数和rea

内存分配机制malloc&amp;&amp;alloca&amp;&amp;realloc

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

程序的内存分配之堆和栈的区别

堆栈概述 ??在计算机领域,堆栈是一个不容忽视的概念,堆栈是两种数据结构.堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除.在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场.要点:堆,队列优先,后进先出(例如:乘车排队,先来的排在前面先上车,后来的就要排的后面后上车).栈,先进后出(First-In/Last-Out)(例如:超市排队结账,大一点的超市收银台都是一段狭长的过道,本来下一个是你了,突然这个收银台说