繁体   English   中英

编译器仅编译可以执行的代码吗?

[英]Will the compiler only compile code that can get executed?

我有一个类库,并且只使用其中的一部分。 是否需要删除未使用的内容以缩小所创建代码的大小(在发布配置中)?

据我所知,编译器会处理这些问题,并且删除代码不会更改EXE文件的大小。 这将永远是真的吗? 删除所有不需要的代码将花费很长时间,因此我想知道是否需要这样做。

更多信息:类库中的方法和类不是从正在执行的代码中调用的,而是由类库中的代码的其他部分引用的(它们本身从未被调用)。

不,编译器还包含“死”代码。 一个简单的原因是,并非总是能够确切知道将要执行什么代码。 例如,甚至一个从未被引用的私有方法也可以通过反射来调用,而公共方法可以被外部程序集引用。

您可以使用工具来帮助您查找和删除未使用的方法(包括仅由其他未使用的方法调用的方法)。 尝试使用什么工具和技术查找无效代码? 查找未使用的代码以开始使用。

一切都被编译了。 不管是否调用它。 该代码可以由外部库调用。

使编译器忽略代码的唯一方法是使用“编译器预处理程序指令”。 更多关于这里

我怀疑编译器将删除任何内容。 事实是,由于反射,可以实例化类型和按名称调用方法,因此编译器无法分辨出使用了什么和不使用了什么。

假设有一个名为Utility类库。 您创建了一个新项目并将该类库添加到该项目。 即使您的EXE仅从类库中调用1-2个方法,删除未引用的代码也不是一个好主意。

这将违反可复用性原则。 尽管事实上在库中会存在一些未从EXE引用的类,但它不会对程序的性能或大小产生任何负面影响。

在大多数语言中,确定所有无效代码(如果使一个人拥有像语言一样的“数学世界”的理想化)是不可确定的。 (可以确定一些罕见的语言,例如布莱斯(Blaise)语言。)

关于是否存在“需要删除不使用的内容以缩小创建的代码的大小”的问题:我认为这仅对节省网络带宽有用。 在Web应用程序中删除未使用的代码对于提高加载速度等至关重要。

如果您的代码是exe或库,那么我看到删除无效代码的唯一原因就是提高代码质量。 这样一来,两年后看您代码的人就不会想知道它的作用了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM