C++ 的一些语言特性使之必须由编译器和链接器共同支持才能完成工作。最主要的有两个方面,一个是C++ 的重复代码消除,还有一个就是全局构造与析构。...重复代码消除
C++编译器在很多时候会产生重复的代码,比如模板( Templates)、外部内联函数(Extern Inline Function)和虚函数表( Virtual Function Table...因为现代的CPU都会对指令和数据进行缓存,如果同样一份指令有多份副本,那么指令 Cache的命中率就会降低
一个比较有效的做法就是将每个模板的实例代码都单独地存放在一个段里,每个段只包含一个模板实例。...到了C++ 的时代,语言层面对ABI的影响又增加了很多额外的内容,可以看到,正是这些内容使C+ +要做到二进制兼容比C来得更为不易;
继承类体系的内存分布、如基类、虚基类在继承类中的位置等;
指向成员函数的指针的内存分布...如果让库的厂商提供所有的编译器型号和版本编译出米的库给用户,这基本上不现实,特别是厂商对库口经停止了维扩后,使用这样陈年老“库”实在是一件令人头痛的事。