当前位置: 首页 > news >正文

【DeepSeek】

在计算机程序的内存布局中,.data段和.bss段都属于数据段,用于存放程序中的全局变量和静态变量。它们最核心的区别在于是否包含初始值以及在可执行文件中的存储方式

以下是详细的对比分析:

1. 核心区别总结表

特性.data 段.bss 段
全称Data SegmentBlock Started by Symbol ( historically )
存储内容已初始化的全局变量和静态变量(初始值非零)。未初始化的全局变量和静态变量,或显式初始化为的变量。
磁盘占用占用磁盘空间。可执行文件中必须保存变量的初始值。不占用磁盘空间(仅记录段的大小和位置)。
内存加载程序加载时,直接从磁盘映射内容到内存。程序加载时,操作系统分配内存空间,并自动清零
读写属性可读可写 (RW)可读可写 (RW)
速度加载速度略慢(需从磁盘读取数据)。加载速度极快(无需读取数据,仅需清零内存)。

2. 详细解析

.data
  • 定义:用于存放程序中显式初始化且初始值不为 0的全局变量和静态变量。
  • 存储机制:因为变量有具体的初始值(例如int a = 100;),这些初始值必须保存在可执行文件中。当程序被加载到内存运行时,操作系统会读取这些值并写入对应的内存地址。
  • 代价:如果有一个巨大的全局数组且每个元素都有初始值,可执行文件的体积会显著增加。
.bss
  • 定义:用于存放程序中未显式初始化,或者显式初始化为 0的全局变量和静态变量。
  • 存储机制:根据 C 语言标准,未初始化的全局变量默认值为 0。既然所有内容都是 0,就没有必要在磁盘文件中存储大量的 0 数据。因此,可执行文件只记录.bss段的起始地址所需长度
  • 加载过程:程序加载时,操作系统根据记录的长度在内存中申请一块空间,然后将这块空间的所有字节直接清零(memset)。这大大节省了磁盘空间。

3. 代码示例

#include<stdio.h>// 1. 存放在 .data 段// 原因:显式初始化为非零值,文件中需存储 "100"intglobal_init_var=100;// 2. 存放在 .bss 段// 原因:未显式初始化,默认为 0,无需占用文件空间intglobal_uninit_var;// 3. 存放在 .data 段// 原因:显式初始化为非零值staticintstatic_init=50;// 4. 存放在 .bss 段// 原因:显式初始化为 0,优化放入 bssstaticintstatic_zero=0;intmain(){// 注意:局部变量通常在栈上,不在这两个段中intlocal_var=10;return0;}

4. 为什么要区分这两个段?

区分.data.bss主要有两个目的:

  1. 减少可执行文件体积
    如果程序中定义了一个巨大的全局数组char buffer[10000];,如果把它放在.data段且初始化为非零,生成的.exeELF文件会凭空多出 10KB 的体积。放在.bss段则几乎不增加文件体积。

  2. 提高加载效率
    .bss段在加载时只需要分配内存并清零,这比从磁盘读取大量数据(.data)要快得多。

5. 内存布局示意图

可以使用 Mermaid 图表来直观展示它们在内存中的位置关系:

运行时内存

磁盘文件

.text 代码段

.data 已初始化数据

.bss 仅记录大小

.text 只读

.data 可读写

.bss 可读写 清零

总结.data是“有内容的干货”,需要存盘;.bss是“预定位置的空地”,只需划拨。

http://www.jsqmd.com/news/654020/

相关文章:

  • Qwen3.5-9B-AWQ-4bit惊艳效果:超市小票照片→商品清单+总价+优惠明细提取
  • 2026保温钢管厂家推荐排行榜产能与专利双优企业权威盘点 - 爱采购寻源宝典
  • Omni-Vision Sanctuary在VSCode中的高效开发:Codex插件集成与调试技巧
  • temux cve
  • 2026智能工业PLC控制厂家推荐排行榜产能与专利双维度权威对比 - 爱采购寻源宝典
  • React Router v6 动态加载实现
  • 告别仿真卡顿!用Vivado的ILA核做“硬件断点”实时抓波形,调试效率翻倍
  • 后端开发进阶:构建高可用Graphormer模型推理网关
  • 2026年知名的钢包自动倾翻装置/全自动倾翻装置/大包自动倾翻装置/渣罐自动倾翻装置实力工厂推荐 - 品牌宣传支持者
  • 单片机ADC采样实战:卡尔曼滤波的参数调优与波形优化
  • 2026护栏网厂家推荐排行榜产能与专利双优企业领跑行业 - 爱采购寻源宝典
  • 什么是5S红牌作战?从红牌张贴到整改闭环,带你读懂5S红牌作战
  • 【k8s springcloud maven】解决fabric8:Kubernetes-client与SpringCloud版本冲突的Maven依赖管理策略
  • 高效清理磁盘,优化电脑性能,数据治理4-企业数仓开发标准与规范。
  • 2026军工级防护抗爆板厂家推荐 廊坊荣特建材集团领衔(产能+专利+服务三维度对比) - 爱采购寻源宝典
  • STM32G474低功耗实战:用CubeMX配置停止模式,实测功耗从mA降到μA
  • python responses
  • 像素史诗·智识终端卷积神经网络(CNN)图像分类项目从零实现
  • 2026防腐钢管厂家推荐沧州华盾领衔,产能与专利双优企业榜单 - 爱采购寻源宝典
  • GEO技术框架解析:从语义理解到权威信源构建
  • 从网线到光纤:保姆级图解SFP光模块在千兆以太网中的信号转换全流程
  • 2026智能高效控制柜厂家推荐 珀克利电气科技(安徽)有限公司领衔(产能+专利+服务三重保障) - 爱采购寻源宝典
  • 2026编织网隔离栅厂家推荐 安平县秉德丝网制品有限公司领衔(产能+专利+质量三重认证) - 爱采购寻源宝典
  • 智能生产线中AGV和RGV的原理、区别、优缺点
  • C++面试高频:模板与可变参数模板
  • UVM面试高频考点精讲:从uvm_component到phase机制的避坑指南
  • 从电脑串口到工业网络:手把手教你用USB转RS485/422模块连接PLC或传感器
  • YOLOv5到v8怎么选?我用同一份植物病害数据集做了个全面对比(附性能测试结果)
  • 机器人生成元平台的详细设计文档
  • 建立论坛网站