初始化后,未初始化的全局变量在哪里出现?

Pat*_*ick 8 c linker elf

我在学习时遇到了一些问题.我知道C中未初始化的全局变量被分配给可执行ELF文件中的.bss部分.但是当我开始使用它们时会发生什么?即他们在堆上或其他地方获得了一席之地?

我试图通过打印(仍然未初始化的)全局变量的地址来找出

printf("%x",&glbl);
Run Code Online (Sandbox Code Playgroud)

总是返回相同的值0x80495bc ...为什么?

Nic*_*yer 8

当操作系统加载程序时,它会从程序的地址空间分配足够的存储空间,以便将所有内容存储在.bss部分中,并将所有内存归零.当您分配或读取或获取变量的地址时,您正在操作分配给.bss部分存储的内存.