C/C++中的内存模型

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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值