编译器是否只编译可以执行的代码
本文关键字:执行 代码 是否 编译 编译器 | 更新日期: 2023-09-27 18:31:19
我有一个类库,只使用其中的一部分。是否需要删除未使用的内容以缩小创建代码的大小(在发布配置中)?
据我所知,编译器会处理这个问题,删除代码不会改变 EXE 文件大小。这永远是真的吗?删除所有不需要的代码需要很长时间,所以我想知道是否需要这样做。
详细信息:类库中有一些方法和类不是从执行代码调用的,而是由类库中代码的其他部分引用的(它们本身永远不会被调用)。
不,编译器也包含"死"代码。 一个简单的原因是,并不总是能够确切地知道哪些代码将被执行,哪些代码不会被执行。 例如,即使是从未引用的私有方法也可以通过反射调用,并且公共方法也可以由外部程序集引用。
您可以使用工具帮助您查找和删除未使用的方法(包括仅由其他未使用的方法调用的方法)。 尝试使用哪些工具和技术来查找死代码?和查找未使用的代码以帮助您入门。
这一切都被编译了。不管它是否被调用。该代码可以由外部库调用。
使编译器忽略代码的唯一方法是使用编译器预处理器指令。更多关于这些的信息 这里.
我怀疑编译器会删除任何东西。事实是,编译器无法分辨使用什么,不使用什么,因为由于反射,可以实例化类型并按名称调用方法。
假设有一个名为 Utility
的类库。您创建了一个新项目,并将此类库添加到该项目。即使您的 EXE 仅调用类库中的 1-2 个方法,删除未引用的代码也绝不是一个好主意。
这将违背可重用性原则。尽管库中存在一些未从 EXE 引用的类,但它不会对程序的性能或大小产生任何不良影响。
在大多数语言中,确定所有且唯一的死代码(如果一个人理想化自己拥有像语言一样的"数学世界")是递归不可判定的。(一些罕见的,如布莱斯语言是可以决定的。
关于是否存在"需要删除未使用的内容以缩小创建代码的大小"的问题:我认为这只会对节省网络带宽有用。 删除未使用的代码在 Web 应用程序中对于提高加载速度等至关重要。
如果你的代码是 exe 或库,我认为删除死代码的唯一原因是提高你的代码质量。 这样,2年后查看您的代码的人就不会挠头想知道它的作用。