C++ 内存段中存储的全局变量和静态变量在哪里?

C++ 内存段中存储的全局变量和静态变量在哪里?,c++,operating-system,C++,Operating System,在我的链接器脚本中,起始地址和大小如下所示: code start:90400000 code end: 90a00000 data start:90b00000, size 3MB bss start: 91200000, size 1MB 但是当我声明一个全局变量时,它的地址是:910bead0 它应该位于.bss部分,但它位于其他地方,我甚至没有在链接器脚本中指定它。 有人能告诉我发生了什么吗?您没有指明您使用的是什么系统等,但传统上:初始化的全局数据放在数据中;未初始化的全局数据进入

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

code start:90400000
code end:  90a00000
data start:90b00000, size 3MB
bss start: 91200000, size 1MB
但是当我声明一个全局变量时,它的地址是:
910bead0
它应该位于
.bss
部分,但它位于其他地方,我甚至没有在链接器脚本中指定它。
有人能告诉我发生了什么吗?

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

int x = 0;

系统不同:一些系统认识到初始化等同于零初始化(即,当您不指定初始化时会发生什么),并将其放入
bss
;其他人只会看到有一个初始化,并将其放入
数据中

在链接过程中生成一个映射文件。注意:
0x910bead0-0x90b00000==0x5BEAD0==6023888
约6MB。'。,您正在使用'->使用codesourcery在cortex A15上创建ELF。我知道内存分割,但正如你所见,地址既不存在于数据中,也不存在于内存中bss@ritesh如果数据不符合您给定的大小,链接器会怎么做?例如,如果数据段中有超过3MB的数据,那么3MB的大小不是硬编码的,而是动态编码的,在链接器中,我包含所有输入数据,并从中计算大小,即一旦计算出数据大小。它将如何改变?