Перейти к содержимому
  • 0
FelixBanan

Локальные переменные не работают

Вопрос

Услышал от qwertyMan'а что глобальные переменные зло и решил заменить все глобальные в приложении на локальные и перестало работать. Может я очень тупой и что то не правильно сделал но не работает.

Изменено пользователем Alex
много грязи и мата

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

Услышал от qwertyMan'а что глобальные переменные зло и решил заменить все глобальные в приложении на локальные и перестало работать.

Глобальные переменные не совсем зло. Они всё-таки необходимы для некоторых целей. Память занимают любые переменные, но локальные работают быстрее. Правда, есть нюансы, о которых где-то рассказывал @ECS: если часто вызывать функцию, внутри которой определена локальная переменная, то вместо ускорения можно получить замедление. Выход из ситуации заключен в создании локальных переменных на уровнях выше часто вызываемых функций. К слову, затраты на доступ к глобальной переменной эквивалентны затратам на доступ к полю локальной таблицы.

 

Главная же особенность глобальных переменных заключена в том, что они доступны любым программам, запущенным в данном окружении. С одной стороны, это ведёт к замусориванию глобального окружения и созданию помех одними запускаемыми программами другим программам, а с другой, глобальне переменные при грамотном использовании дают программам механизм обмена данными через глобальное окружение. И если не стоит именно такая задача, то глобальные переменные создают больше проблем, чем решают их.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну смотри. Глобальные переменные действуют НА ВСЮ программу... а локальные - на цикл и т.п.

Возможно что у тебя ниже кто-то просится к локальной переменной которую не может получить.

*Возможно я ничего не знаю про переменные в Lua. Поправьте кто нибудь. :(*

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Ну смотри. Глобальные переменные действуют НА ВСЮ программу... а локальные - на цикл и т.п.

Возможно что у тебя ниже кто-то просится к локальной переменной которую не может получить.

*Возможно я ничего не знаю про переменные в Lua. Поправьте кто нибудь. :(*

как я знаю глобальные записываются в оперативную память, а локальные работают только по программе. А тут это не работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

как я знаю глобальные записываются в оперативную память, а локальные работают только по программе. А тут это не работает.

Окей. Мне всегда хватало ОЗУ. Я не думаю что глобальные переменные будут жрать  сотни кб памяти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

как я знаю глобальные записываются в оперативную память, а локальные работают только по программе. А тут это не работает.

возможно будут не совсем корректен, но я постараюсь

 

глобальные переменные видны на всей программе, а локальные только в той конструкции, в которой объявлены и тем, которые происходят внутри конструкции, в которой объявлена переменная(цикл, условие, функция и т.п.)

 

область видимости обзывается вроде

https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D1%8C_%D0%B2%D0%B8%D0%B4%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8

 

локальные пошустрее будут

Изменено пользователем ivan52945

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Глобальные переменные не совсем зло. Они всё-таки необходимы для некоторых целей. Память занимают любые переменные, но локальные работают быстрее. Правда, есть нюансы, о которых где-то рассказывал @ECS: если часто вызывать функцию, внутри которой определена локальная переменная, то вместо ускорения можно получить замедление. Выход из ситуации заключен в создании локальных переменных на уровнях выше часто вызываемых функций. К слову, затраты на доступ к глобальной переменной эквивалентны затратам на доступ к полю локальной таблицы.Главная же особенность глобальных переменных заключена в том, что они доступны любым программам, запущенным в данном окружении. С одной стороны, это ведёт к замусориванию глобального окружения и созданию помех одними запускаемыми программами другим программам, а с другой, глобальне переменные при грамотном использовании дают программам механизм обмена данными через глобальное окружение. И если не стоит именно такая задача, то глобальные переменные создают больше проблем, чем решают их.
разжевано просто полностью =) спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Глобальные переменные не совсем зло.

После ковырянии в сишной луа(пишу эмулятор), на самом деле практически для каждой операции, создание чего либо - вызывается аллокатор и реалоцирует размер выделенной области. Тобишь, хочешь увеличить таблицу, вызывается аллокатор, а в нем уже расширения выделенной области, а это затратно, если в конце не хватает свободного места - то участок полностью копируется и переносится в область требуемой размером. Если интересно, могу позже выложить лог с тем как требует память луа при загрузке базовой библиотеке.

Изменено пользователем NEO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...