当前位置:  开发笔记 > 编程语言 > 正文

外线虚拟方法

如何解决《外线虚拟方法》经验,为你挑选了1个好方法。

什么是外联虚拟方法以及它为什么会影响链接时间?

http://llvm.org/docs/CodingStandards.html说

如果在头文件中定义了一个类并且具有vtable(它具有虚方法或者它来自具有虚方法的类),则它必须始终在类中具有至少一个外联虚拟方法.如果没有这个,编译器会将vtable和RTTI复制到每个.o文件中,其中#include标题,膨胀.o文件大小和增加链接时间.

Dark Falcon.. 45

编译器必须为具有虚方法的类发出vtable.这包含指向这些方法的指针.如果所有虚拟方法都是内联的(在头文件中定义),那么编译器不知道哪个翻译单元(.cpp文件)在其中发出vtable,因此它会在所有这些中发出一个副本,并且链接器会处理用它.这会在目标文件中产生额外的工作和膨胀.另一方面,如果虚拟函数是在线外定义的(在.cpp中),则可以在那里发射vtable,因此只会发出一个副本.这同样适用于RTTI.



1> Dark Falcon..:

编译器必须为具有虚方法的类发出vtable.这包含指向这些方法的指针.如果所有虚拟方法都是内联的(在头文件中定义),那么编译器不知道哪个翻译单元(.cpp文件)在其中发出vtable,因此它会在所有这些中发出一个副本,并且链接器会处理用它.这会在目标文件中产生额外的工作和膨胀.另一方面,如果虚拟函数是在线外定义的(在.cpp中),则可以在那里发射vtable,因此只会发出一个副本.这同样适用于RTTI.

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有