zoukankan      html  css  js  c++  java
  • 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)   ... //   这个检查可能会成功

  • 相关阅读:
    Linux学习之查看是否安装软件
    Linux学习之nfs实例
    Linux学习之nfs安装配置
    Linux 学习之防火墙配置
    Linux学习之系统时间同步
    Linux学习之守护进程详解
    Linux学习之Center os网络配置
    Linux学习之挂载操作
    Linux学习之挂载
    Linux学习之开机启动
  • 原文地址:https://www.cnblogs.com/lp3318/p/5969999.html
Copyright © 2011-2022 走看看