- 论坛徽章:
- 0
|
本帖最后由 wmmy2008 于 2010-07-01 13:09 编辑
const char test1[100000]={0};
char test2[100000] = {1};
char test3[100000]= {0};
定义了三个全局数组,,在X86下用GCC 汇编出来的代码:
.globl test1
.section .rodata
.align 32
.type test1, @object
.size test1, 100000
test1:
.zero 100000
.globl test2
.data
.align 32
.type test2, @object
.size test2, 100000
test2:
.byte 1
.zero 99999
.globl test3
.bss
.align 32
.type test3, @object
.size test3, 100000
test3:
.zero 100000
可以看出test1,test2,test3分别在全局内存的 .rodata段,.data段和.bss段 。。。在编译成可执行文件时,可以看出 .rodata段和.data段的变量既要占用文件空间又要占用运行是空间。
而.bss段的变量不会占用文件的空间。。所以说如果定义一个很大的全局数组并且初始化为一个非0值时,编出来的可执行文件就会很大。 |
|