我问自己以下问题,当我在讨论this的话题。垃圾从其他链接单元
是否有这样的情况,当翻译单元中的一些未使用的代码将链接到GCC和VC++等流行编译器的最终可执行代码(当然是发布模式)?
例如,假设我们有2个编译单元:
//A.hpp
//Here are declarations of some classes, functions, extern variables etc.
和源文件
//A.cpp
//defination of A.hpp declarations
最后主要
//main.cpp
//including A.hpp library
#include "A.hpp"
//here we will use some stuff from A.hpp library, but not everything
我的问题是。如果在main.cpp中,不是所有来自A.hpp的东西都被使用了?链接器会删除所有未使用的代码,或者在某些情况下,当一些未使用的代码可以与可执行文件链接时?
编辑:我对G ++和VC++链接器感兴趣。
编辑:当然我的意思是在发布模式。
编辑:我开始赏金这个问题得到很好的和完整的答案。我在等待答案,这将解释在哪些情况下,g ++和VC++链接程序正在链接垃圾以及它们能够从可执行文件中删除哪些类型的代码(不需要的函数,不需要的全局变量,不需要的类定义等等)以及为什么他们不能删除某些不需要的东西。
请指定编译器。 – leppie 2011-01-27 10:37:55
对于GCC,在SO上搜索`-gc-sections`。我以前回答过这个问题。我认为它被称为VC++的函数级链接。 – leppie 2011-01-27 11:24:45