如何测量pimpl候选人?

ric*_*eek 6 c++ profiler pimpl-idiom

pimpl(也称为编译器防火墙)习惯用于缩短编译时间,但代价是可读性和一点运行时性能.目前一个项目需要很长时间才能编译,如何衡量最佳的pimpl候选人?

我有使用pimpl的经验,将项目的编译时间从两小时缩短到十分钟,但我只是按照我的直觉做了这个:我推断出类头文件包括(1)很多源代码(2)复杂/模板类,是使用疙瘩成语的最佳人选.

是否有一个工具可以客观地指出哪些类是优秀的pimpl候选人?

小智 0

确实,Pimpl 对于增量编译很有用。

但使用 Pimpl 的主要原因是保持 ABI 兼容性。这是我以前的公司对 API 中几乎所有公共类的规则。

其他优点是您还可以将库作为包含不公开实现细节的标头的包进行分发。

为此我会说:尽可能使用 Pimpl。

一篇非常好的文章,介绍了 Qt Pimpl 实现细节和优点: https: //wiki.qt.io/D-Pointer

编译时问题必须通过以下方式解决:

  • 使用预编译头
  • 根据代码接触频率将您的大项目划分为小项目。不经常更改的部分可以在库中编译并发布到其他项目按版本引用的本地存储库中。
  • ...