- 论坛徽章:
- 0
|
- /**
- * 前两个是初使化了的数据
- * 后两个则是未初使化的数据,对static的数据也是一样.
- * 初始化的数据被存放在数据段,未初始化的则被放在bss.
- */
- char buffer[] = "This is a buffer";
- int array[] = {1, 3, 5, 7, 9};
- char info[256];
- int values[4];
- int main()
- {
- info[0] = '1';
- values[1] = 4;
- return 0;
- }
复制代码
用mingw, gcc -S getSize.c 产生的汇编代码
- .file "getSize.c"
- .globl _buffer
- .data # 这里就是全局初始化了的数据
- _buffer:
- .ascii "This is a buffer\0"
- .globl _array
- .align 4
- _array:
- .long 1
- .long 3
- .long 5
- .long 7
- .long 9
- .def ___main; .scl 2; .type 32; .endef
- .text
- .globl _main
- .def _main; .scl 2; .type 32; .endef
- _main:
- pushl %ebp
- movl %esp, %ebp
- subl $8, %esp
- andl $-16, %esp
- movl $0, %eax
- addl $15, %eax
- addl $15, %eax
- shrl $4, %eax
- sall $4, %eax
- movl %eax, -4(%ebp)
- movl -4(%ebp), %eax
- call __alloca
- call ___main
- movb $49, _info
- movl $4, _values+4
- movl $0, %eax
- leave
- ret
- .comm _info, 256 # 256 这里就是未初始化的数据.
- .comm _values, 16 # 16 这里的256和16表示的应当是数据对齐,你info gas确认一下
复制代码
初始化的数据占据空间,而对于未初始化的数据,则只有等到程序开始执行之后,对其初始化为0
至于多出来的应当时考虑数据对齐后的结果吧.
[ 本帖最后由 coldwarm 于 2007-6-6 23:59 编辑 ] |
|