用一个实验来说明
1.
gcc -O1 -S test.c // 编译出汇编文件test.s
可以看到全局变量accum被引用,这是因为编译器还不能确定它所处的内存地址。
2.
gcc -O1 -c test.c // 编译、汇编出test.o
然后查看目标文件的反汇编代码:
3.
gcc -O1 -o test test.c main.c // 编译、汇编、链接整个程序(必须包含main函数)
查看可执行程序的反汇编:
objdump -d test
可以看到,2和3中的反汇编代码的区别:
- 链接器将整个程序搬移到了另外一个地址范围中。
- 链接器确定了全局变量accum的地址,是0x0804a018。
《深入理解计算机系统》