我有一个 C++ 库,它生成的代码比我真正期望的要大得多。从不到 50K 行的源代码中,我获得了几乎 4 MB 的共享对象和推动 9 的静态存档。这是有问题的,因为库二进制文件非常大,而且更糟糕的是,即使是链接到它的简单应用程序通常也会获得 500 到 1000代码大小为 KB。使用 -Os 等标志编译库会有所帮助,但效果并不是很大。
我还尝试过 GCC 的 -frepo 命令(尽管我见过的所有文档都表明在 Linux 上,collect2 无论如何都会合并重复的模板)以及模板上的显式模板实例化,这些模板似乎“可能”被重复很多,但没有无论哪种情况都有实际效果。当然,我说“可能”是因为,与任何类型的分析一样,像这样的盲目猜测几乎总是错误的。
是否有某种工具可以轻松分析代码大小,或者我可以通过其他方式找出是什么占用了这么多空间,或者更一般地说,我应该尝试其他任何事情?在 Linux 下工作的东西将是理想的,但我会采取我能得到的。
如果您想了解可执行文件中放入了什么内容,请询问您的工具。打开 ld 链接器的 --print-map (或 -M)选项来生成一个映射文件,显示它在内存中放入的内容和位置。对静态链接示例执行此操作可能会提供更多信息。
如果您不直接调用 ld,而是仅通过 gcc 命令行调用,则可以通过在它们前面添加 ld 特定选项,从 gcc 命令行将 ld 特定选项传递给 ld-Wl,
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)