您当前的位置: 首页 >  c++

我什么都布吉岛

暂无认证

  • 4浏览

    0关注

    292博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C/C++中的内存模型

我什么都布吉岛 发布时间:2019-11-12 14:17:54 ,浏览量:4

20200925:堆,申请了一堆空间等着程序员开发;栈,和客栈,栈道一样,预先组织好的东西。不知道为什么总是混淆堆栈,(。・∀・)ノ゙

经常遇到这样的困扰,我们写的代码在计算机中都存放在哪呢?这篇文章给了一个比较清晰的回答。

C/C++中内存模型

这里自己重新抄了一遍。C++内存分为5个区域(堆栈全常代 ):

  1. 堆 heap 动态申请的、程序员自治的一片内存区域,程序结束时资源可能被回收[1]。涉及的问题:“缓冲区溢出”、“内存泄露”
  2. 栈 stack 编译器管理的一片内存区域。如局部变量、函数参数。函数返回局部变量会回收。
  3. 全局/静态存储区 (.bss段和.data段) 也称为数据区(Data Segment),可以分为初始化数据区和未初始化数据区。初始化数据区又可以分为只读和可读可写区,如:static int i=0 const static double a=3.14;未初始化区中的变量是指用户未给定初值的全局或者静态变量,编译器将会将其默认初始化为0。全局和静态变量被分配到同一块内存中。在C语言中,未初始化的放在.bss段中,初始化的放在.data段中;在C++里则不区分了。
  4. 常量存储区 (.rodata段) 存放常量,不允许修改(通过非正当手段也可以修改)
  5. 代码区 (.text段) 代码段(text Segment/code Segment)包含了可执行指令,是目标程序或者内存的一部分。该段区域是只读的,防止程序意外改变其中的指令。

在这里插入图片描述

[1] 取决于操作系统是否支持 [2] https://www.geeksforgeeks.org/memory-layout-of-c-program/

关注
打赏
1658157489
查看更多评论
立即登录/注册

微信扫码登录

0.0368s