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) ... // 这个检查可能会成功