news 2026/4/28 9:06:11

bss段、data段、text段、heap堆、stack栈的基本概念

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
bss段、data段、text段、heap堆、stack栈的基本概念

1. bss段

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

2. data段

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

3. text段

代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读(某些架构也允许代码段为可写,即允许修改程序)。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

4. heap堆

heap堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。

5. stack栈

stack栈又称堆栈,是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的后进先出LIFO特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。

6. 存储

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

全局的未初始化变量存在于.bss段中,具体体现为一个占位符;

全局的已初始化变量存于.data段中;

函数内的自动变量都在栈上分配空间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/26 8:44:19

基于STM32单片机的智能窗帘/晾衣架控制系统 物联网无线控制 蓝牙WIFI传输 定时开关 光线采集 雨滴感应 防盗报警成品套件 DIY设计 实物+源程序+原理图+仿真+其它资料(832-4/5/6)

本人从事毕业论文设计辅导10余载,撰写的毕业论文超2000余篇,为广大的应届毕业生节省了大量的设计和撰写时间。在单片机领域,参与设计51系列、STM32系列、Proteus仿真、JAVA上位机、Android Studio、物联网无线通信等千余套项目,具…

作者头像 李华
网站建设 2026/4/26 8:15:09

并发编程中的CAS机制:原理、实现与应用剖析

在并发编程领域,确保线程安全通常首先会联想到加锁机制,如synchronized或ReentrantLock。虽然加锁是直观且广泛采用的方案,但在高并发场景下,锁带来的性能开销——如上下文切换、内核态切换及线程阻塞——可能成为系统瓶颈。为此&…

作者头像 李华
网站建设 2026/4/23 15:06:15

把设备参数翻译成老板听得懂的“利润语言”

制造业销售常常会犯一个错误:对工厂老板大谈“主轴转速12000rpm”“定位精度0.003mm”“支持五轴联动”……老板表面上点点头,心里却在想:“这跟我赚不赚钱有什么关系?”技术参数是工程师的语言,而利润才是老板的母语&#xff0c…

作者头像 李华
网站建设 2026/4/24 17:55:04

新手入门 CTF 想稳拿分?吃透这几招,轻松起步

CTF新手想入门拿分?吃透这几点 一、先搞懂:CTF 到底是啥?网安人为啥必须练? 很多新手问我,CTF不就是个比赛吗?没必要非得学?这话可就错了!CTF全称 Capture The Flag,就是…

作者头像 李华
网站建设 2026/4/25 4:40:16

2026 网络安全行业深度解读:行业前景、入门路线与系统学习手册

一、行业发展现状:风口上的黄金赛道 2025 年的网络安全行业已从 “被动防御” 迈入 “主动对抗” 的全新阶段,三大核心驱动力让行业持续保持高速增长。 政策层面,《网络安全法》《数据安全法》的刚性约束下,从政务、金融到医疗、…

作者头像 李华