所以当一个模板在多个编译单元同时实例化成相同的类型的时候,必然会生成重复的代码。当然,最简单的方案就是不管这些,将这些重复的代码都保留下来。不过这样做的主要问题有以下几方面。
空间浪费。...比如有个模板函数是ad(),某个编译单元以int类型和float类型实例化了该模板函数,那么该编译单元的日标文件中就包含了两个该模板实例的段。...这样,当别的编译单元也以int或foat类型实例化该模板函数后,也会生成同样的名字,这样链接器在最终链接的时候可以区分这些相同的模板实例段,然后将它们合并入最后的代码段。...因此,当一个程序的main函数正常退出时,Glib会安排执行这个段中的代码
这两个段init和fini的存在有着特别的目的,如果一个函数放到init段,在main函数执行前系统就会执行它。...函数调用方式,比如参数入栈顺序、返回值如何保持等
堆栈的分布方式,比如参数和局部变量在堆栈里的位置,参数传递方法等。