如果我有一個變量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