最简单的情况就拿模板来说,模板从本质上来讲很像宏,当模板在·个编译单元里被实例化时,它并不知道自己是否在别的编译单元也被实例化了。...因为现代的CPU都会对指令和数据进行缓存,如果同样一份指令有多份副本,那么指令 Cache的命中率就会降低
一个比较有效的做法就是将每个模板的实例代码都单独地存放在一个段里,每个段只包含一个模板实例。...这样,当别的编译单元也以int或foat类型实例化该模板函数后,也会生成同样的名字,这样链接器在最终链接的时候可以区分这些相同的模板实例段,然后将它们合并入最后的代码段。...当我们须要用到某个目标文件中的任意一个函数或变量时,就须要把它整个地链接进来,也就是说那些没有用到的函数也被一起链接了进来。...因此,当一个程序的main函数正常退出时,Glib会安排执行这个段中的代码
这两个段init和fini的存在有着特别的目的,如果一个函数放到init段,在main函数执行前系统就会执行它。