C++不同变量所在内存&&new malloc的区别

********************************************

c++变量与内存区

********************************************

1.栈区(stack)

存放函数参数、局部变量;  

由编译器自动分配释放;

操作方式类似于数据结构中的栈

2.堆区(heap)

由程序员分配释放,new操作符或malloc函数;

跟数据结构中的heap是两回事;

3.全局区(静态区)

初始化的全局变量和静态变量存放在一起;

未初始化的全局变量与静态变量放在相邻区域

有编译器自动分配释放;

4.文字常量区

字符串常量存放区域;

由系统分配释放;

5.程序代码区

存放函数的二进制代码

***************************************************

mallo与new的区别:指针,大小,初始化

http://blog.csdn.net/zjc156m/article/details/16819357

***************************************************

1.new返回指定类型的指针,并且可以自动计算所需要大小,调用了构造函数

--malloc则必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针;

2.new可以在声明的时候指定初始值

--malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。

3.new/delete 是C++操作符

--malloc/free是C函数(是new/delete的子集,保留它是因为在C++中要调用C函数)

相同点:他们都可以动态分配内存

****************************************************

如何检查new失败

****************************************************

新标准之前,new失败返回0;

新标准之后,new失败要返回std::bad_alloc,同时保留了之前返回0的做法(无抛出)

例子:

a.

widget   *pw1   =   new   widget;//   分配失败抛出std::bad_alloc  

if   (pw1   ==   0)   ... //   这个检查一定失败 

b.

widget   *pw2   =   new   (nothrow)   widget;   //   若分配失败返回0

if   (pw2   ==   0)   ... //   这个检查可能会成功

原文地址:https://www.cnblogs.com/lp3318/p/5969999.html