首页 > 编程语言 > 详细

C++之内存分配

时间:2020-03-03 02:06:22      阅读:51      评论:0      收藏:0      [点我收藏+]

C++内存模型

  • 五大存储区
    1. 栈区
      由编译器在运行时自动为其分配与释放内存,如局部变量、函数形参、函数使用临时变量作为返回值等。
      eg:
      void paint(int a){}
      当此函数被调用时,编译器自动在栈区为该形参 a 分配内存,当函数调用结束,编译器即会释放栈中该变量所占用的内存。局部变量亦如是,执行到局部变量的定义语句时,编译器便会为其分配内存,离开其所在作用域时,即会释放内存。
      ps:
      (个人以为,C++中是没有栈区这个概念的,实际上是抽象为自动变量此概念。为了方便解析,以下均使用栈区作为说明。)
      疑问:
    2. 栈上变量之间分配的内存是连续的吗

    3. 堆区
      由程序员来分配与释放,存储周期为,直到程序员释放内存,若一直不释放即一直占用。如new关键字,申请的就是堆上的内存,C++中将其抽象为自由存储区。
      疑惑:
    i. 堆区中各自申请的内存是连续紧挨着的吗?还是说,直接在堆区中循环寻找,直到找到一块大于或等于所申请的内存大小的区域,即会存在内存碎片?

    1. 静态存储区
      在程序启动时,编译器就已经为其分配好内存,直到结束前的这段时间,其位置都不会发生改变。如,全局变量,静态局部变量,静态全局变量等。
      疑惑:
    i. 到底是不是编译器为其分配的内存,还是操作系统直接就为它分配的。

    1. 常量区
      存放const修饰的变量或者字面量。(唔...这样定义是否正确?)
    2. 代码区
      存放可执行文件,即一系列的机器指令的文件。

C++之内存分配

原文:https://www.cnblogs.com/LeeQMoon/p/12398896.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!