Если у меня есть переменная int d; // some comment
. Будет ли это лучше, чем int daysElapsedSinceBlahBlahBlahBlah
без комментариев. Это более прочный корпус, но разве это потеряет память?Являются ли длинными переменными имена потерей памяти?
ответ
Это зависит исключительно от языка и его реализации, но я могу привести несколько примеров, основанных на нескольких языках, которые я знаю.
В языках C и C++ имена переменных являются символьными идентификаторами для программиста и компилятора. Компилятор заменяет их адресами памяти, реестрами CPU или иным образом строит их обращения, чтобы полностью их устранить. Имена не отображаются в сгенерированном коде. Они могут появляться в генерируемой отладочной информации, но вы можете опустить это для выпуска сборок программы, когда вам больше не нужно выполнять интерактивную отладку.
В Java компилятор исключает имена локальных переменных и перезаписывает код для использования смещений относительно стека. Имена полей (т. Е. Переменные на уровне класса) сохраняются в скомпилированном байт-коде. Это требуется в основном из-за того, что классы скомпилированы индивидуально и могут быть связаны динамически во время выполнения, поэтому компилятор не может одновременно оптимизировать состояние всей программы. Другие имена полей причины сохраняются, потому что они доступны через reflection. Во время выполнения виртуальная машина может генерировать собственный код, который в основном использует адреса памяти и собственные регистры процессора в виде C & C++. Имена полей хранятся в памяти в любом случае для отражения, и поэтому могут быть связаны любые дополнительные загруженные классы. Средние программные оптимизаторы &, такие как ProGuard, могут сделать все символические имена намного короче.
В языках с функцией eval, таких как JavaScript и PHP, даже локальные имена переменных должны храниться теоретически, так как к ним можно получить доступ по имени через строки времени выполнения. Хороший интерпретатор может оптимизировать это, чтобы использовать быстрые адреса памяти в случаях, когда он может доказать, что конкретная переменная не открывается по имени.
В настоящих линейных интерпретаторах, таких как очень старые реализации BASIC, имена переменных должны храниться всегда, потому что интерпретатор работает непосредственно из исходного кода. Он забывает о каждой строке, когда он переходит к следующему, поэтому он не имеет возможности отслеживать переменные, кроме как их имена в источнике. Поскольку полный исходный код должен храниться в памяти во время выполнения, и он часто ограничивался 64 КБ или меньше, имена переменных действительно имели значение! Код из этой эры часто использовал (и повторно использовал) загадочные короткие имена из-за этого (но также по другим причинам, например, как код BASIC иногда печатался в журналах, которые нужно ввести, и на этих платформах не было особенно приятных клавиш или редакторов.)
Если вы программируете для переводчика с 1980-х годов или ранее, имена идентификаторов в любом случае настолько дешевы, что вы не должны беспокоиться об этом. Выбирайте имена, которые достаточно длинны, чтобы быть понятными, и достаточно короткие, чтобы их можно было быстро прочитать. Пусть компилятор беспокоится об остальном или запустит оптимизатор или minifier в коде после его написания.
Вы отметили это как language-agnostic
, но этот пример соответствует семейству C-языков. В C-подобных языках имя переменной не должно терять память, это всего лишь метка для компилятора. В результирующем двоичном коде он будет заменен адресом памяти.
В общем, нет никакой пользы в сохранении имени переменной внутри результирующего двоичного кода, единственное, что я могу придумать, - это экстремальная отладка, обратная инженерия или какая-то странная форма отражения. Ни один из них не является нормальным случаем использования.
Переменные имена never занимает память. По крайней мере, не достаточно, чтобы даже начать беспокоиться об этом. Хотя в какой-либо языковой реализации будут храниться имена переменных где-то (иногда язык даже требует этого), пространство, которое они занимают, абсолютно крошечное по сравнению со всем остальным, что летает. Просто используйте то, что лучше всего по другим показателям (читаемость, соглашения и т. Д.).
- 1. Являются ли узлы «динамическими» переменными?
- 2. Являются ли процедуры переменными типа?
- 3. Являются длинными цепочками jQuery плохо?
- 4. PDO-оператор, где имена таблиц и полей являются переменными
- 5. Указатели на указатели: какой тип данных с переменными длинными строками?
- 6. Являются ли глобальные переменные переменными C?
- 7. Являются ли итераторы STL-контейнеров статическими переменными?
- 8. Являются ли переменными-членами как характеристики объекта?
- 9. Работа с очень длинными переменными varchar/nvarchar?
- 10. Умышленное сбоя приложения C с потерей памяти
- 11. Рекурсия с потерей указателя и памяти
- 12. Функция C fscanf с потерей памяти
- 13. Являются ли переменные (длинными, двойными ...) в файлах, хранящихся неправильно?
- 14. Могут ли мои имена файлов (изображений) быть слишком длинными?
- 15. Минимизирующие имена функций с длинными параметрами
- 16. HTML5 Проблема с потерей памяти холста
- 17. Являются ли переменными типа RAW неизменяемыми в коде PL/SQL?
- 18. Являются ли имена PendingIntent для sms aribtrary?
- 19. установки Java-имена переменных переменными
- 20. Являются ли python «глобальными» (модульными) переменными нитями локальными?
- 21. Являются ли приложения .NET естественным объемом памяти?
- 22. Являются ли крючки памяти gcc иногда обходными?
- 23. Являются ли индексы памяти ElasticSearch быстрыми?
- 24. Являются ли участники класса непрерывными в памяти?
- 25. Являются ли удаленные файлы флэш-памяти уязвимыми?
- 26. Являются ли мои подклассы причиной утечек памяти?
- 27. Являются ли мои свойства утечкой памяти?
- 28. Проблема с длинными длинными вычислениями
- 29. Точность расстояния между двумя длинными длинными длинными
- 30. Как вычислить область многоугольника в базе данных MySQL, когда точки многоугольника являются длинными длинными?
Это, скорее всего, потребует обсуждения. Речь идет не о конкретной проблеме программирования, с которой вы сталкиваетесь, или о том, как подойти к ней. На мой взгляд, это не подходит для SO. Кроме того, это сильно зависит от контекста. –
@BenjaminGruenbaum Проблема программирования (по крайней мере гипотетическая) четко изложена. Контекстная зависимость должна быть частью ответа – SomeWittyUsername
@icepack Это вопрос предпочтения, этот вопрос открыт. –