以下有2个文件a.c和b.c,a.c调用了b.c中的swap函数
在文件a.c中多次调用文件b.c中的swap函数,a.o中的符号表中只出现了一次swap符号
- c和b.c链接后生成的ab2目标文件的代码段:
main代码段上的call swap有3个,符合在main函数中调用swap函数调用3次,
从表层的a.o和b.o的静态链接生成的目标文件来看,是否可以认为a.o和b.o静态链接的实质之一是把a.o中全部的代码段与b.o中全部的代码段进行拼接??
按照上述的设想,虽然main.c中只调用了a.c中的swap函数,但是拼接a.o和b.o的时候,swap1 ,swap2, swap3, swap4也会被拼接到代码段中
链接生成的目标文件ab3
查看符号表可以看到swap1 ,swap2, swap3, swap4也包含进去了
以上是造成内存浪费的原因之一