如果我有一个变量int d; // some comment
。 这会比int daysElapsedSinceBlahBlahBlahBlah
好,没有任何评论。 这是更加reabale,但它会浪费记忆?长变量名是否浪费内存?
回答
这完全取决于语言及其实现,但我可以给你一些基于我知道的几种语言的例子。
在C和C++中,变量名称是程序员和编译器的符号标识符。编译器用内存地址,CPU寄存器替换它们,或者用内联函数替换它们的访问,以完全消除它们。这些名称不会出现在生成的代码中。它们可以出现在生成的调试信息中,但是当不需要再进行交互式步骤调试时,可以省略该程序的发布版本。
在Java中,编译器消除函数本地变量名称并重写代码以使用堆栈相对偏移量。字段名称(即类级别的变量)在编译的字节码中保留。这主要是因为类是单独编译的方式,并且可以在运行时动态链接,所以编译器无法一次优化整个程序的状态。字段名称保存的另一个原因是因为它们可通过reflection获得。在运行时,虚拟机可以生成本地代码,其主要仅使用内存地址和本地CPU寄存器,其方式为C++。不管怎样,字段名都保存在内存中,用于反射,并且可以链接任何其他加载的类。中期全程序优化器&像ProGuard这样的混淆器可以使所有的符号名称尽可能短。
在诸如JavaScript和PHP之类的具有eval函数的语言中,即使局部变量名也必须保持在理论上,因为它们都可以通过运行时字符串按名称访问。一个好的解释器可以优化它以在使用快速内存地址的情况下可以证明特定变量不是按名称访问的。
在真正的逐行解释程序中,像很老的BASIC实现一样,必须始终保持变量名,因为解释程序直接从源代码运行。当它移动到下一行时,它会忘记每一行,因此除了在源代码中使用它们的名称之外,它无法跟踪变量。由于完整的源代码必须在运行时保存在内存中,并且通常限制在64 kB或更少,所以变量名称确实很重要!这个时代的代码经常使用(和重复使用)加密的短名称,因为这个原因(也出于其他原因,比如BASIC代码有时被打印在需要输入的杂志中,而这些平台没有特别好的键盘或编辑。)
除非您为80年代或更早版本的翻译编程,否则无论如何标识符名称都很便宜,您不必担心。选择足够长的可以理解的名称,并且足够短以便快速阅读。让编译器担心其余部分,或者在编写代码后运行优化程序或代码minifier。
您将此标记为language-agnostic
,但该示例对应于C语言系列。在C语言中,变量的名字不应该浪费内存,它只是编译器的标签。在生成的二进制代码中,它将被内存地址替换。
一般来说,在生成的二进制文件中存储变量的名称没有任何好处,我能想到的唯一用法是一些极端的调试,反向工程或某种奇怪的反射形式。这些都不是正常的使用情况。
变量名称从不占用内存。至少还不足以甚至开始担心它。尽管某些语言实现将变量名称存储在某个地方(有时语言甚至需要这样做),但与其他所有环境相比,它们占用的空间相当小。只要使用其他指标(可读性,惯例等)最好的方法。
- 1. 有用或浪费内存?
- 2. 浪费内存加速jvm
- 3. 动态分配或浪费内存?
- 4. 寻找浪费内存的课程
- 5. 表单引用浪费内存?
- 6. “Class myclass = Class()”是否浪费资源?
- 7. Apache GZIP的缓存状态,是否浪费CPU?
- 8. JavaScript:如何检查变量是否存在变量名?
- 9. 长变量名称
- 10. Actionscript3:变量是否存在?
- 11. GHC中的变量名称是否有长度限制?
- 12. 查找变量名数组中是否不存在文件名
- 13. 扩展SQLiteOpenHelper是不是浪费时间?
- 14. 基类中的数据成员是否存在于派生类中会导致内存浪费?
- 15. 传递大量数据的变量是否会在Mathematica中花费大量内存和时间?
- 16. 仿型代码对战潜在浪费变量
- 17. 链接器脚本浪费我的内存
- 18. Python - 做大doc字符串浪费内存?
- 19. 复制一个发电机而不浪费内存
- 20. 一种避免浪费内存的方法
- 21. 缩短的语法会浪费内存吗?
- 22. 命名变量的长度
- 23. 缩小变量名长度
- 24. 如何知道内存中的变量是否是指针?
- 25. 全局变量是否总是停留在内存中..?
- 26. 是否将module.exports分配给单独的对象浪费存储器
- 27. 值是变量名称而不是变量的内容
- 28. JAVA NIO是否因持续循环而浪费CPU周期?
- 29. 单个状态对象是否会导致Angular2浪费资源?
- 30. 是否使用扩展方法ToList <T>()浪费资源?
这可能会引起讨论。这不是关于你面对的具体编程问题,或者如何解决它。在我看来,这不太适合。此外,它高度依赖于上下文。 – 2013-03-09 21:43:30
@BenjaminGruenbaum编程问题(至少是假设的)已清楚陈述。上下文相关性应该是答案的一部分 – SomeWittyUsername 2013-03-09 21:53:24
@icepack这是一个偏好问题,这个问题是开放性的。 – 2013-03-09 21:54:13