【问题标题】:where is the global and static variables stored in memory segment?存储在内存段中的全局变量和静态变量在哪里?
【发布时间】:2013-10-23 11:07:21
【问题描述】:

在我的链接器脚本中,起始地址和大小如下:

code start:90400000
code end:  90a00000
data start:90b00000, size 3MB
bss start: 91200000, size 1MB

但是当我声明一个全局变量时,它的地址是:910bead0 它应该位于.bss 部分,但它在其他地方,我什至没有在链接描述文件中指定。 谁能告诉我这是怎么回事?

【问题讨论】:

  • 在链接过程中生成地图文件。
  • 注意:0x910bead0 - 0x90b00000 == 0x5BEAD0 == 6023888 大约是 6MB。

标签: c++ operating-system


【解决方案1】:

您没有说明您正在使用什么系统等,但传统上:初始化的全局数据进入data;未初始化的全局数据进入bss(初始化为0)。当你写这样的东西时:

int x = 0;

系统不同:有些人认为初始化等同于零初始化(即当您不指定初始化时会发生什么),并将其放入bss;其他人只会看到有初始化的事实,并将其放入data

【讨论】:

  • '你没有指明你正在使用什么系统等'-> 使用 codesourcery 在 cortex A15 上创建 ELF。我知道内存分段,但是你可以看到地址既不在数据中也不在 bss 中
  • @ritesh 如果数据不适合您提供的大小,链接器会做什么?例如,如果它有超过 3MB 的空间可以放入数据段?
  • 大小 3MB 没有硬编码它的动态,在链接器中我包括所有输入 .data 并从中计算大小。即一旦计算数据大小。它会如何改变?
猜你喜欢
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 2015-11-03
相关资源
最近更新 更多