- 論壇徽章:
- 0
|
- /**
- * 前兩個(gè)是初使化了的數(shù)據(jù)
- * 后兩個(gè)則是未初使化的數(shù)據(jù),對static的數(shù)據(jù)也是一樣.
- * 初始化的數(shù)據(jù)被存放在數(shù)據(jù)段,未初始化的則被放在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;
- }
復(fù)制代碼
用mingw, gcc -S getSize.c 產(chǎn)生的匯編代碼
- .file "getSize.c"
- .globl _buffer
- .data # 這里就是全局初始化了的數(shù)據(jù)
- _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 這里就是未初始化的數(shù)據(jù).
- .comm _values, 16 # 16 這里的256和16表示的應(yīng)當(dāng)是數(shù)據(jù)對齊,你info gas確認(rèn)一下
復(fù)制代碼
初始化的數(shù)據(jù)占據(jù)空間,而對于未初始化的數(shù)據(jù),則只有等到程序開始執(zhí)行之后,對其初始化為0
至于多出來的應(yīng)當(dāng)時(shí)考慮數(shù)據(jù)對齊后的結(jié)果吧.
[ 本帖最后由 coldwarm 于 2007-6-6 23:59 編輯 ] |
|