当前位置:  开发笔记 > 编程语言 > 正文

我的C++对象文件太大了

如何解决《我的C++对象文件太大了》经验,为你挑选了3个好方法。

我正在研究一个C++程序,来自一个1200行文件(初始化一个相当复杂的状态机)的编译对象代码几乎达到了一兆字节.什么可以使文件这么大?有没有办法找到目标文件中需要空间的内容?



1> Kosi2801..:

当目标文件大于它们必须至少时,可能有几个原因:

静态地包括依赖库

使用调试信息构建

建立分析信息

使用模板创建(极其)复杂的数据结构(可能是递归的boost-structures)

编译时没有打开优化标志(保存不那么多,如果使用得太厉害会造成困难)

起初我建议检查你是否正在使用调试信息进行构建,这会导致我的体验中最臃肿.



2> moonshadow..:

(我假设你已经进行了优化并且打开了死代码剥离).

打开链接器的"生成映射文件"选项并检查输出.

常见的罪魁祸首是产生大量代码和大型全局对象的宏/模板.



3> Anteru..:

可能是一些模板实例化(尤其是std::iostreams),也可能是大量的内联(即在头文件中完全定义的类).但是,首先是1兆字节的目标文件有什么问题?在链接期间,它可能会产生一个很小的二进制文件.我在这里得到了一个项目,其中包含20 MiB的目标文件,例如链接到700 KiB二进制文件.

更新:也可能是一些大的静态数组/对象.除此之外,使用MSVC++和GCC,您可以查看生成的文件的程序集,它可以为您提供一些提示(使用GCC g++ -S foo.cpp,对于MSVC++,它是'/ FAs').要么你会看到很多模板实例,那么这就是原因.如果不是,那就是对象的对象大小static.

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有