如果您刚刚达到 RAM 限制,您可能会听到磁盘工作的声音,系统活动监视器会告诉您这一点。但是如果链接仍然受 CPU 限制(即如果 CPU 使用率仍然很高),那不是问题。如果链接是 IO 绑定的,那么最常见的罪魁祸首可能是运行时信息。无论如何,看看可执行文件的大小。
以不同的方式回答您的问题:您是否正在大量使用模板?对于具有不同类型参数的模板的每次使用,都会生成整个模板的新实例,因此您可以为链接器做更多的工作。但是,要使这一点真正引人注目,您需要使用一些非常重模板的库。Boost 项目中的许多项目都符合条件——当使用具有复杂语法的 Boost::Spirit 时,我得到了基于模板的代码膨胀。大约 4000 行代码编译为 7,7M 可执行文件 - 更改一行使所需的专业化数量和最终可执行文件的大小增加了一倍。不过,内联帮助很大,导致 1,9M 的输出。
共享库可能会导致其他问题,您可能需要查看 -fvisibility=hidden 的文档,无论如何它都会改进您的代码。来自 -fvisibility 的 GCC 手册:
Using this feature can very substantially
improve linking and load times of shared object libraries, produce
more optimized code, provide near-perfect API export and prevent
symbol clashes. It is *strongly* recommended that you use this in
any shared objects you distribute.
事实上,链接器通常必须支持应用程序或其他库覆盖定义到库中的符号的可能性,而这通常不是预期的用途。请注意,使用它不是免费的,但是它确实需要(微不足道的)代码更改。
文档建议的链接是: http: //gcc.gnu.org/wiki/Visibility