据我所知,全局变量分为两种类型:已初始化和未初始化。它们是如何存储的?它们都存储在可执行文件中吗?我可以想到已初始化的全局变量将其初始值存储在可执行文件中。但是未初始化的全局变量需要存储什么呢?
我的理解如下:
可执行文件被组织为几个节,例如.text、.data 和 .bss。代码存储在.text 节中,已初始化的全局或静态数据存储在.data 节中,而未初始化的全局或静态数据存储在.bss 节中。
感谢您抽出时间查看我的问题。
更新 1 - 11/3/2010 上午9:56
我在这里找到了一个好的参考资料:
汇编语言源代码中的段 - 使用 .text、.data 和 .bss 指令构建文本和数据段
更新 2 - 11/3/2010 上午10:09
@Michael
全局变量 global[100] 未被初始化。在我的可执行文件中,global[100] 将如何被记录?由谁在什么时候分配?如果它被初始化会怎样?
我的理解如下:
可执行文件被组织为几个节,例如.text、.data 和 .bss。代码存储在.text 节中,已初始化的全局或静态数据存储在.data 节中,而未初始化的全局或静态数据存储在.bss 节中。
感谢您抽出时间查看我的问题。
更新 1 - 11/3/2010 上午9:56
我在这里找到了一个好的参考资料:
汇编语言源代码中的段 - 使用 .text、.data 和 .bss 指令构建文本和数据段
更新 2 - 11/3/2010 上午10:09
@Michael
我在汇编代码中定义了一个100字节的未初始化数据区,这100个字节没有存储在我的可执行文件中,因为它们没有被初始化。
谁会在RAM中分配这100个字节的未初始化内存空间?是程序加载器吗?
假设我有以下代码:
int global[100];
void main(void)
{
//...
}
全局变量 global[100] 未被初始化。在我的可执行文件中,global[100] 将如何被记录?由谁在什么时候分配?如果它被初始化会怎样?
.rdata
段用于存放const
变量(抱歉使用了矛盾修辞法)。 - ruslikvoid main
既不是合法的C语言,也不是合法的C++语言。main
函数的返回类型必须始终为int
。 - Konrad Rudolph