C++
int global_value = 1;
static int static_value = 2;
void foo()
{
static_value = 3;
}
int global_value_uninitialized;
static int static_value_uninitialized;
int main()
{
static_value_uninitialized = 4;
}
在Terminal中執行
cc -arch i386 -S hello.cpp
得到彙編語言
.section __TEXT,__text,regular,pure_instructions
.globl __Z3foov
.p2align 4, 0x90
__Z3foov:
pushl %ebp
movl %esp, %ebp
calll L0$pb
L0$pb:
popl %eax
movl $3, __ZL12static_value-L0$pb(%eax)
popl %ebp
retl
.globl _main
.p2align 4, 0x90
_main:
pushl %ebp
movl %esp, %ebp
calll L1$pb
L1$pb:
popl %eax
xorl %ecx, %ecx
movl $4, __ZL26static_value_uninitialized-L1$pb(%eax)
movl %ecx, %eax
popl %ebp
retl
.section __DATA,__data
.globl _global_value
.p2align 2
_global_value:
.long 1
.p2align 2
__ZL12static_value:
.long 2
.globl _global_value_uninitialized
.zerofill __DATA,__common,_global_value_uninitialized,4,2
.zerofill __DATA,__bss,__ZL26static_value_uninitialized,4,2
可以看到代碼放在(__TEXT,__text)
中
global_value和static_value放在(__DATA,__data)
中
global_value_uninitialized放在(__DATA,__common)
中
static_value_uninitialized放在(__DATA,__bss)
中
代碼
.section __TEXT,__text,regular,pure_instructions
有個簡寫的等價directive
.text
代碼
.section __DATA,__data
有個簡寫的等價directive
.data
代碼
.zerofill __DATA,__common,_global_value_uninitialized,4,2
有個簡寫的等價directive
.comm _global_value_uninitialized,4
代碼
.zerofill __DATA,__bss,__ZL26static_value_uninitialized,4,2
有個簡寫的等價directive
.lcomm __ZL26static_value_uninitialized,4,2