您的位置:首页 > 编程语言 > C语言/C++

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

2016-10-17 15:40 295 查看
********************************************

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) ... // 这个检查可能会成功
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐