C/C++内存分区

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

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

  • 栈区

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

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

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

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

    • 存放常量的区域,不允许修改
posted @ 2017-06-01 10:07  JeffLai  阅读(571)  评论(0编辑  收藏  举报