重载函数和可执行文件/库的大小

时间:2011-07-06 18:59:59

标签: c++ qt

在研究Qt框架时,我注意到它散布着所有类中分散的数百个重载函数。这让我想知道这些函数对库的大小有多大贡献。

如果不经过一个消除每个重载函数的繁琐过程,是否可以确定它们对每个库的最终大小有多大影响?

此问题与我遇到的任何项目或问题无关。这是纯粹的好奇心。

2 个答案:

答案 0 :(得分:4)

在GCC中,在编译时使用的选项是-ffunction-sections和-fdata-sections,在链接时使用-gc-sections。这使它基本上创建了一个程序图,并删除了未引用的任何函数,变量等。

对于共享库,共享库获取所有代码 - 它们都在那里(如果可能是外部引用的),并且您无法以任何方式更改它。

如果它们基本上是内联函数,那么你可能会更好 - 它们只能用于允许默认参数等。内联函数也使用--gc-sections进行垃圾收集。

答案 1 :(得分:3)

拥有良好的链接器并激活链接时代码生成(MSVC中的/LTCG)和链接时优化,应从最终的可执行文件中删除未使用的代码。此外,如果这些类是模板,则在实际使用之前,成员函数甚至不会被实例化。

template<class T>
struct Foo{
  void WontExistInExe(){
    std::cout << "You won't see me until you call me!\n";
  }
};