编译器是否只编译可以执行的代码?
我有一个类库,只使用它的一部分。 是否需要删除未使用的内容以缩小创build的代码的大小(在发布configuration中)?
据我所见,编译器负责处理,删除代码不会改变EXE文件的大小。 这将永远是真的吗? 删除所有不需要的代码将花费很长时间,所以我想知道是否需要这个。
更多信息:类库中有些方法和类不从执行代码中调用,而是由类库中的其他代码部分引用(本身不会被调用)。
不,编译器也包含“死”的代码。 一个简单的原因是,并不总是可以确切地知道哪些代码将会被执行。 例如,即使是从未引用的私有方法也可以通过reflection来调用,公共方法可以被外部程序集引用。
您可以使用工具来帮助您查找和删除未使用的方法(包括仅由其他未使用的方法调用的方法)。 尝试使用哪些工具和技术来查找死代码? 并find未使用的代码 ,让你开始。
这一切都被编译。 不pipe它是否被调用。 代码可能被外部库调用。
使编译器忽略代码的唯一方法是使用Compiler Preprocessor指令。 更多关于这里的人 。
我怀疑编译器会删除任何东西。 事实上,编译器不能告诉什么是什么,什么不是,因为types可以被实例化,并且通过名称调用方法,这要归功于reflection。
假设有一个名为Utility
类库。 您创build了一个新项目,并将该类库添加到该项目中。 即使您的EXE只从类库调用1-2个方法,删除未引用的代码也不是一个好主意。
这将违背可重复性原则。 尽pipe在EXE中未提及的库中会出现一些类,但对程序的性能或大小没有任何坏的影响。
确定所有和唯一的死代码是(如果一个理想化,像语言一样有一个“math世界”)recursion地不可判定,在大多数语言。 (像Blaise语言这样的less数几个可以确定的)