You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM汇编中全局变量存储位置疑问:全局数据段还是动态数据段?

全局变量的存储位置解析

先直接给结论:全局变量的存储位置得看它的定义和初始化方式,和“程序启动时是否知道值”没有直接绑定关系,动态数据段(堆)也不是用来存这类全局变量的。

  • 普通全局变量(编译/链接阶段可确定值或未初始化)
    这类变量会被放在全局数据段里,具体又分两种:

    • 已经初始化且值固定的,比如int global_num = 20;,会存在.data子段;
    • 未初始化(或初始化为0)的全局变量,比如int uninit_global;,会存在.bss子段。
      这两个子段都属于你书里说的“全局数据段”范畴,内存是程序加载时就分配好的,生命周期和整个程序一致。
  • 运行时才确定初始化值的全局变量
    比如你写int runtime_global = get_some_value_at_start();,这种变量的存储位置依然在全局数据段(.data)里。区别只是它的初始化逻辑会被放到程序启动的初始化流程中,等程序运行起来后再把计算好的值赋值给它,本质上还是全局数据段的变量,和动态数据段没关系。

  • 动态数据段(堆)存的是什么?
    动态数据段是用来存运行时手动申请的内存,比如用malloc()、new这类函数分配的内存,或者动态加载的模块数据。这些内存不是全局变量,它们的生命周期由开发者手动控制(申请、释放),和全局变量的“程序启动即存在、退出才释放”完全不同。

你书里的内存布局图应该也能佐证这一点:全局数据段是程序加载时就固定好的内存区域,而动态数据段是程序运行后可以灵活扩展的区域,两者的定位和使用场景完全不一样。

内容的提问来源于stack exchange,提问作者user394334

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:35:20