在一个大项目中,我们有很多类(数千个),并且为每个类定义了一个特殊的智能指针类型,使用typedef。这个智能指针类型是一个模板类。当我使用"gcc -Q"编译时,我看到gcc花费了大量时间来为每个类编译这些智能指针,即我看到
有没有什么诀窍可以加快这个过程?从smartptr的角度来看,这些类都是相同的,没有启用任何enable_if技巧等。
我现在正在尝试的事情:
- 可能会创建一个具有少量公共方法的非模板基类 - 使用extern template class来减少链接符号(和实例化时间?还不确定)
但以上所有内容都不是完整的解决方案。我想知道是否有另一种优化编译时间的方法,一种诀窍可以让gcc知道,例如如果它解析了smartptr一次,那么当看到其他专业化时,它可以反复应用相同的知识,因为生成的代码是相同的。
是的,我知道它不完全相同......但那只是个疯狂的想法。
或者也许还有其他我不知道的技巧,可以加快编译速度。(只是为了给你一个想法,我们可以通过消除其静态成员数据实例化来优化另一个模板,这大大减少了编译时间。这一点并不明显。)
smartptr<class1>::methods, then smartptr<class2>::methods... smartptr<class2000>::methods
在屏幕上滚动,因为gcc在处理它们。有没有什么诀窍可以加快这个过程?从smartptr的角度来看,这些类都是相同的,没有启用任何enable_if技巧等。
我现在正在尝试的事情:
- 可能会创建一个具有少量公共方法的非模板基类 - 使用extern template class来减少链接符号(和实例化时间?还不确定)
但以上所有内容都不是完整的解决方案。我想知道是否有另一种优化编译时间的方法,一种诀窍可以让gcc知道,例如如果它解析了smartptr一次,那么当看到其他专业化时,它可以反复应用相同的知识,因为生成的代码是相同的。
是的,我知道它不完全相同......但那只是个疯狂的想法。
或者也许还有其他我不知道的技巧,可以加快编译速度。(只是为了给你一个想法,我们可以通过消除其静态成员数据实例化来优化另一个模板,这大大减少了编译时间。这一点并不明显。)
#define smartptr std::shared_ptr
可以提供帮助。内联方法可以减少链接/实例化时间。 - Olaf Dietsche