我想知道在代码中使用未使用的函数会产生什么后果?
如果你追捕并删除所有未使用的函数和变量,那么性能会有任何令人难以置信的改善吗?
或者删除未使用的函数和变量只是好习惯吗?
答案 0 :(得分:9)
未使用的功能不会损害性能。他们正在为维护代码的人们提供更多的工作。现代IDE会跟踪未使用的函数/方法和变量。如果不是你所说的技术的情况,维护者将不得不处理未使用的代码,认为这是必要的。
答案 1 :(得分:4)
根据您的编译器/链接器,它可能根本不需要任何费用(甚至可以自动删除),或者因为代码更大并且提供缓存未命中而给予小额惩罚。但我希望它也是非常小的差异。
编辑:当其他代码可能会调用它时,无法自动执行删除操作,即库代码或其他可以在以后重用的二进制文件。它也依赖于语言 - 如果你编写JavaScript,一切都会被加载并且可能被解析,所以这将比编译语言更大的惩罚。
答案 2 :(得分:2)
在大多数语言中,未使用的函数不会对执行产生任何可衡量的性能影响。未使用的函数将影响代码/二进制文件大小。在Javascript中,这会影响下载时间和一些解析时间。
未使用的变量可能会影响性能,因为它们会进行一些内存分配。但是这里和那里一些未使用的变量的开销可能也不可测量。
删除未使用的代码的最大好处是在开发过程中更好地控制。如果您进行了更改,则无需通过大量未使用的代码来检查它是否可能会生效。
答案 3 :(得分:2)
存在一个安全问题:如果攻击者可以控制应用程序的执行(缓冲区溢出,交叉编写脚本等),内存中的代码片段将使他更容易实现重要的事情(特别是如果代码片段访问特权的话)注册表项和文件等资源。
答案 4 :(得分:1)
OCaml和Haskell警告你未使用的函数/变量,假设如果你定义它们必定是有原因的,而不使用它们可能在代码中的其他地方指示一个拼写错误(例如,调用类似命名的函数而不是)。为了这个额外的帮助,我尽量避免或至少注释掉我不使用的东西。
一个好的编译器将简单地优化掉未使用的代码,因此在运行时不会受到惩罚。
答案 5 :(得分:0)
这是一个很好的做法。 在启用优化的情况下编译时,几乎每个编译器/链接器都会跳过未使用的代码。
答案 6 :(得分:-1)
它们会增加编译时间,但最终的二进制文件(或库)不会增加,因为所有未使用的符号都应该是条带化的。
如前所述,没有运行时惩罚。