文章目录

  • bss段
  • data段
  • text段
  • 堆(heap)
  • 栈(stack)
  • 一个程序本质上都是由 bss段、data段、text段三个组成的。
  • 存储类型总结

bss段

bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。

bss是英文Block Started by Symbol(由符号启始的区块)的简称。

bss段属于静态内存分配。

data段

数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。

数据段属于静态内存分配。

text段

代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。

这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读(某些架构也允许代码段为可写,即允许修改程序)。

在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

堆(heap)

堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。

当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);

当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。

栈(stack)

栈又称堆栈,是用户存放程序临时创建的局部变量,

也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。

除此以外,在函数被调用时,其参数(函数形参)也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。

由于栈的先进后出(FILO)特点,所以栈特别方便用来保存/恢复调用现场。

从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。

一个程序本质上都是由 bss段、data段、text段三个组成的。

这样的概念,不知道最初来源于哪里的规定,但在当前的计算机程序设计中是很重要的一个基本概念。

而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配,存储单元占用空间大小的问题。

在采用段式内存管理的架构中(比如intel的80x86系统),bss段通常是指用来存放程序中未初始化的全局变量的一块内存区域,

一般在初始化时bss 段部分将会清零。bss段属于静态内存分配,即程序一开始就将其清零了。

比如,在C语言之类的程序编译完成之后,已初始化的全局变量保存在.data 段中,未初始化的全局变量保存在.bss 段中。

text和data段都在可执行文件中(在嵌入式系统里一般是固化在镜像文件中),由系统从可执行文件中加载;

而bss段不在可执行文件中,由系统初始化。

参考文章:(深入理解计算机系统) bss段,data段、text段、堆(heap)和栈(stack)

存储类型总结


参考文章:黑马程序员C语言基础(第七天)内存管理

(深入理解计算机系统) bss段,data段、text段、堆(heap)和栈(stack)(C/C++存储类型总结)(内存管理)相关推荐

  1. bss段,data段、text段、堆heap和栈stack

    bss段,data段.text段.堆heap和栈stack bss段 data段 text段 堆(heap) 栈(stack) 例子 在C的学习中,你总避免不了对各类数据的存储区域学习归纳总结,简单的 ...

  2. BSS段 data段 text段 堆heap 和 栈stack

    BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配.     ...

  3. .data和.text段合并

    a.c #include <stdio.h> extern int share; int main(void) { int a=100; swap(&a,&share); ...

  4. stm32中堆、栈、flash、ROM、RAM、bss段、data段、text段、Code、Ro-data、 ZI-data、RW-data简介

    1. 堆.栈.flash.ROM.RAM.bss段.data段.text段.Code.Ro-data ZI-data.RW-data的区别? 1.1 堆.栈简介 堆栈是指在stm32启动文件中定义的那 ...

  5. 浅谈text段、data段和bss段

    一般情况,一个程序本质上都是由 bss段.data段.text段三个段组成--这是计算机程序设计中重要的基本概念.而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配,存储单元占用 ...

  6. linux 目标文件(*.o) bss,data,text,rodata,堆,栈

    学习于:http://blog.csdn.net/sunny04/article/details/40627311 linux目标文件 一个简单的程序被编译成目标文件后的结构如下: 注:初始化为0在此 ...

  7. 2021春深入理解计算机系统大作业---hello的一生

    计算机系统 大作业 题     目 程序人生-Hello's P2P 专       业 计算学部 学    号 120L021725 班    级 2003006 学       生 杨楠 指 导 ...

  8. 笔记-深入理解计算机系统

    文章目录 计算机系统漫游 信息的表示和处理 信息存储 数字革命的基础--二值信号 信息存储 十六进制表示法的妙用 字数据大小 寻址和字节顺序 表示字符串 布尔代数简介 C语言逻辑运算和移位运算 整数表 ...

  9. [翻译]理解Unity的自动内存管理

    当创建对象.字符串或数组时,存储它所需的内存将从称为堆的中央池中分配.当项目不再使用时,它曾经占用的内存可以被回收并用于别的东西.在过去,通常由程序员通过适当的函数调用明确地分配和释放这些堆内存块.如 ...

最新文章

  1. oracle sap 用友 保险财务系统比较,SAP和用友的财务管理系统比较详解
  2. 堆密度测定的意义_堆密度的测量
  3. java实践源码--哈弗曼树
  4. 变频器输出功率_工业电气设计|变频器的输出功率该如何选择?
  5. 【转】idea激活搭建授权服务器
  6. list 排序_十个必知的排序算法|Python实例系列
  7. Mac 安装 homebrew 流程 以及 停在 Updating Homebrew等 常见错误解决方法
  8. SqlServer 更新/新增一条语句,返回其中某一列的值 inserted,@@IDENTITY()
  9. 在英特尔® 架构平台上开发和优化基于 NDK 的 Android 游戏应用
  10. 栈的应用--马踏棋盘-贪心加栈
  11. android 通过串口来控制pwm的输出_ESP8266_07基于PWM的呼吸灯
  12. mt4怎么用云服务器跟单,【MT4如何登陆观摩账户?MT4观摩账户怎么设置?】
  13. 200元组群晖—HP惠普T610瘦客户端:直接硬盘启动黑群晖
  14. 创新或许就是青睐偏执狂
  15. 寄存器 SRAM DRAM存储单元区别
  16. 功能强大特别的5款浏览器,简直好用极了
  17. 【算法笔记】异或运算的奇妙之处
  18. 千寻位置 开发demo_从智能驾驶到智慧交通,看千寻位置如何助力未来“智”变...
  19. spidermonkey的使用及代码(SpiderMonkey1.7)
  20. 名编辑电子杂志大师教程 | 输出HTML,*.EXE,*.ZIP,*.APP电子杂志格式

热门文章

  1. NT系统DOS网络命令记录
  2. 校内网用户为什么那么多?
  3. c++ 数组换行_C语言的数组的构建与打印
  4. python爬取百度百科表格_第一个python爬虫(python3爬取百度百科1000个页面)
  5. python购物车程序-Python编写购物车程序
  6. 【学习笔记】利用Excel实现简易版大屏
  7. 【温故知新】HTML学习笔记(表格)
  8. JCO与bapi的联合使用
  9. ABAP 实现新会话新窗口方法
  10. SIT和UAT有什么区别?