zoukankan      html  css  js  c++  java
  • C/C++内存分区

    随手搜的一个问题,本来只是想印证一下自己的想法,怎料这个问题居然还有这么多不同的说法。根据网上的资料和我自己的观点,总结如下:

    在C/C++中内存分为五个区:栈区、堆区、(自由存储区、)全局/静态存储区和常量存储区

    • 栈区

      • 通常是局部变量和函数参数,由编译器自动分配释放
    • 堆区

      • 本来在我的理解中,动态分配的内存都应该在堆区,即new和malloc的内存都在此,现在才发现是把C和C++的记混了
      • C++中使用malloc分配的内存,在堆区,而由new分配的内存,则在自由存储区
      • 关于自由存储区和堆区的概念相关,见C++ 自由存储区是否等价于堆?, 感谢小伙伴suilin的提醒。
    • 自由存储区

      • C++中,由new分配的内存,在这个区。
      • 而在C语言中是没有这个区的,由malloc分配的内存,在堆区
    • 全局/静态存储区

      • 全局变量和静态变量。
      • 在C语言中,全局变量又分为初始化的和未初始化的,其中初始化的全局变量和静态变量在这一分区,未初始化的全局变化和静态变量在与之相邻的另一区域中(BSS段)
      • 在C++中,没有区分变量的初始化和未初始化,所以,都在这一内存区
    • 常量存储区

      • 存放常量的区域,不允许修改
  • 相关阅读:
    Maven
    Maven
    Maven
    Maven
    Maven
    Maven
    Maven
    Maven
    Maven教程
    SASS
  • 原文地址:https://www.cnblogs.com/lengender-12/p/6927476.html
Copyright © 2011-2022 走看看