在bss段中声明数据的一个好处是数据不包含在可执行的程序中。在数据段中定义数据时必须被包含在可执行的程序中,因为必须使用特定值初始化。
test1.s
.section .text
.global _start
_start:
movl $1, %eax
movl $0, %ebx
int $0x80
运行:
$ as -o test1.o test1.s
$ ld -o test1 test1.o
$ ls -al test1
运行结果显示占用664字节
test2.s
.section .bss
.lcomm buffer ,10000
.section .text
.global _start
_start:
movl $1, %eax
movl $0, %ebx
int $0x80
运行:
$ as -o test2.o test2.s
$ ld -o test2 test2.o
$ ls -al test2
运行结果显示占用872字节
test3.s
.section .bss
.lcomm buffer ,10000
.section .text
.global _start
_start:
movl $1, %eax
movl $0, %ebx
int $0x80
运行:
$ as -o test3.o test3.s
$ ld -o test3 test3.o
$ ls -al test3
运行结果显示占用10872字节
在 bss中有 . lcomm 和 .comm ,前者表示局部变量后者表示全局变量