Другие языки программирования и технологии
[C++] Почему не рекомендуют использовать глобальные переменные?
Помню на лекциях препод говорил что глобальные переменные использовать не рекомендуется. Вроде как доступ к ним осуществляется дольше. Но я не понимаю, чем обращение к памяти в стеке быстрей или лучше чем к глобальной? И если использовать static переменные, получается они равно такие же глобальные, только формально компилятор прячет их имена от меня вне области? Так и не понял, чем глобальные переменные плохи.
1. Непрослеживаемость изменений. Ты не можешь знать, не изменит ли какая-то функция глобальную переменную, и будешь использовать эту переменную после из расчета, что она не изменена.
2. Чтобы узнать где глобальная переменная меняется, тебе надо просмотреть практически всю программу.
3. Ты можешь запутаться в именах, если их очень много
4. Иногда они бывают к месту, но очень редко.
2. Чтобы узнать где глобальная переменная меняется, тебе надо просмотреть практически всю программу.
3. Ты можешь запутаться в именах, если их очень много
4. Иногда они бывают к месту, но очень редко.
Это относится только к очень большим проектам. Если обращение к переменной происходит из другого сегмента памяти, то мы уже упираемся в недостатки архитектуры х-80-х процессоров.
В main() можно использовать любые переменные. Но функция должна работать только с тем, что ей дают, иначе это не функция в полном смысле этого слова.
Гугли отличие стека от кучи (глобальные переменные хранятся в куче, локальные - в стеке), да и в общем, как работает память
Добавлю своих пять копеек. Думаю что стек находится в кеше (локальные переменные делаются в стеке), глобальная создается в куче, и если она давно не используется то наверняка ее нет уже в кеше.
Павел Аксенов
Глобальные переменные находятся а секции .data
Проблема с глобальными переменными в том, что любой метод может менять их значения. Если у вас код на 5000 строк, в котором 30 методов / функций контролировать значение переменной становится очень трудным. В каком-нибудь методе взял и случайно изменил значение, а в другом методе, ты думал, что значение одно, а оно на самом деле другое, и ищешь полдня в каком месте программы поменялось значение.
Чтобы не засирать память, если у Вас мощная прога с тяжёлыми вычислениями
Похожие вопросы
- Почему нельзя использовать глобальные переменные?
- В каких случаях в Си надо использовать переменные static, а не глобальные переменные?
- Подскажите как решить используя динамические переменные ( С++)
- Как использовать значение переменной как ИМЯ переменой или метода,,,? С#
- да зачем нужны эти указатели ?? C++. Зачем нужны указатели? почему не обойтись без простой переменной??
- Чем отличаются статические и глобальные переменные?
- C++ Windows Form как ввести в переменную слово, пробовал char - не работает char n; n="1"; - тут возникает ошибка
- Мой учитель очень расстроился, когда я ему сказал что перешел на C#. Почему?
- Почему программисты часто используют ОС Linux,а не какой-нибудь Windows?
- Почему не рекомендуют интернет магазин делать на DRUPAL или Joomla?