如何减少模板繁重的C++代码的输出大小?

Evg*_*zin 13 c++ templates boost-spirit

我有一个很大的问题.我有一个公共库,在我的项目中使用.这个图书馆密集使用boost.spiritboost.fusion.不幸的是,图书馆约.700Mb大小.使用了所有的重要boost.spirit代码,它运行良好.可以采取哪些措施来减少其输出尺寸?是否有一个工具可以帮助确定哪些模板实例化浪费了大部分空间?

起初,我决定将所有精神感知代码移动到cpp文件.其次,我将尝试不同的编译器标志来优化大小.我不知道还能做什么.

更新(详细信息)

我正在使用GNU工具链.巨大的库实际上是一个静态库.使用这个700Mb库的可执行文件大小为200Mb.至少有一半的代码是*.h文件.一些boost.spirit语法(非常模板重的东西)也位于*.h文件中.

干杯!

Mat*_* M. 5

将精神意识代码移动到.cpp文件是一个很好的第一步,虽然你提到在头文件中有精神语法,但它可能是不完整的.

  1. 确保从未将任何语法/规则导出到库外.如果您有典型的include/ src目录,则在目录中移动这些文件(即使标题)src.

  2. 将所有这些符号标记为库的内部符号.它们不应该从图书馆外面访问.根据您的编译器有特定的编译指示/属性,在gcc上查找可见性属性:__attribute__ ((visibility ("internal"))).这有助于编译器相应地优化它们,特别是编译器可以发出函数的代码,即使它在给定的调用站点上内联它,以防万一这个函数地址被采用.但是,通过内部可见性,因为它知道代码不会离开对象,所以它可能会忽略该功能.

  3. 我似乎记得一个标志,以融合相同的功能体,但似乎无法再找到...