使用未使用的功能会带来什么后果

时间:2010-10-18 11:29:30

标签: performance language-agnostic

我想知道在代码中使用未使用的函数会产生什么后果?

如果你追捕并删除所有未使用的函数和变量,那么性能会有任何令人难以置信的改善吗?

或者删除未使用的函数和变量只是好习惯吗?

7 个答案:

答案 0 :(得分:9)

未使用的功能不会损害性能。他们正在为维护代码的人们提供更多的工作。现代IDE会跟踪未使用的函数/方法和变量。如果不是你所说的技术的情况,维护者将不得不处理未使用的代码,认为这是必要的。

答案 1 :(得分:4)

根据您的编译器/链接器,它可能根本不需要任何费用(甚至可以自动删除),或者因为代码更大并且提供缓存未命中而给予小额惩罚。但我希望它也是非常小的差异。

编辑:当其他代码可能会调用它时,无法自动执行删除操作,即库代码或其他可以在以后重用的二进制文件。它也依赖于语言 - 如果你编写JavaScript,一切都会被加载并且可能被解析,所以这将比编译语言更大的惩罚。

答案 2 :(得分:2)

在大多数语言中,未使用的函数不会对执行产生任何可衡量的性能影响。未使用的函数将影响代码/二进制文件大小。在Javascript中,这会影响下载时间和一些解析时间。

未使用的变量可能会影响性能,因为它们会进行一些内存分配。但是这里和那里一些未使用的变量的开销可能也不可测量。

删除未使用的代码的最大好处是在开发过程中更好地控制。如果您进行了更改,则无需通过大量未使用的代码来检查它是否可能会生效。

答案 3 :(得分:2)

存在一个安全问题:如果攻击者可以控制应用程序的执行(缓冲区溢出,交叉编写脚本等),内存中的代码片段将使他更容易实现重要的事情(特别是如果代码片段访问特权的话)注册表项和文件等资源。

答案 4 :(得分:1)

OCaml和Haskell警告你未使用的函数/变量,假设如果你定义它们必定是有原因的,而不使用它们可能在代码中的其他地方指示一个拼写错误(例如,调用类似命名的函数而不是)。为了这个额外的帮助,我尽量避免或至少注释掉我不使用的东西。

一个好的编译器将简单地优化掉未使用的代码,因此在运行时不会受到惩罚。

答案 5 :(得分:0)

这是一个很好的做法。 在启用优化的情况下编译时,几乎每个编译器/链接器都会跳过未使用的代码。

答案 6 :(得分:-1)

它们会增加编译时间,但最终的二进制文件(或库)不会增加,因为所有未使用的符号都应该是条带化的。

如前所述,没有运行时惩罚。