静态变量编译之后,被编译器放到了可执行文件的哪个字段? 以下实验在ubuntu10.04上完成,使用gcc4.4.3。 测试源码如下:
使用gcc -S static_val.c 编译: |
![]() |
作为初始化之后的全局变量g_val_init, 汇编中记录了其全局属性,对齐方式,类型,变量长度(4字节)。 而未初始化的全局变量g_val_uninit,仅仅在.comm中记录了一部分信息,并没有标记globl信息。 |
![]() |
作为初始化了的全局静态变量s_global_inited, 没有特别的处理。 未初始化的全局静态变量s_global_uninited,被标记了.local, 并添加了.comm信息。 |