我使用cnPack 使用清洁器,但总的来说,拥有无用单元的缺点是什么?
我知道其中一些:
1)当然,如果整个项目中从未使用过该单元,则会消耗无用的资源
2)代码洞察力将给出无用的结果
3)代码洞察会变慢
但是想象一个简单的例子:
- 我有一个有 2 种形式的项目,我在其中一种形式中使用 StrUtils,但我在两种形式中都声明了 StrUtils ......在这种情况下,内存消耗是否有任何不利因素?
我使用cnPack 使用清洁器,但总的来说,拥有无用单元的缺点是什么?
我知道其中一些:
1)当然,如果整个项目中从未使用过该单元,则会消耗无用的资源
2)代码洞察力将给出无用的结果
3)代码洞察会变慢
但是想象一个简单的例子:
不。一般来说,智能链接的工作原理是这样的:
结论:最终.exe大小确定
Free Pascal 的工作方式大致相同,只是默认值不同;调试目前几乎总是“二进制”(如 TD32),并且在快照中,智能链接默认关闭。(虽然在官方版本中它是开启的)。
此外,我们绝不能忽视规模。整个 Strutils 最大为 15kb。
(2011-11-01更新)
有人对我喜欢分享的这个回复发表了评论:
基本上他对枚举总是链接的评论表示怀疑。也许注册具有枚举类型的已发布属性的类会将它们拖进来。推理是有道理的,但我还没有测试过。因此,只有在某处查询 typeinfo(tenumtype) 或者在使用的类的已发布部分中使用它时,才能直接链接 enum 的 RTTI。(直接或查询typeinfo(theclass))
Delphi 智能链接器将忽略未使用的代码,因此通常这些“额外”单元的存在不会增加已编译程序的大小。
以下是我从这个链接中得到的关于未使用单位的缺点的一些观点
在我看来,最大的问题是你有时会被 Delphi 范围规则所吸引。如果你在不同的单元中有两个同名的标识符,那么使用这个名称是指在uses 子句中最近声明的单元中声明的那个。
如果您因此遇到问题,您始终可以完全指定标识符。我真正希望看到的是编译器警告,告诉您是否正在命名一个标识符,该标识符的身份仅由使用子句范围规则中的最新声明确定。