Глобальная переменная: различия между версиями
[непроверенная версия] | [отпатрулированная версия] |
Содержимое удалено Содержимое добавлено
Addbot (обсуждение | вклад) м Перемещение 12 интервики на Викиданные, d:q1143344 |
РоманСузи (обсуждение | вклад) перев |
||
Строка 1:
В [[программирование|программировании]] '''глобальной переменной''' называют [[Переменная (программирование)|переменную]], [[Область видимости|областью видимости]] которой является вся программа (кроме {{не переведено|есть=:en:Variable shadowing|надо=Затенение переменных|текст=затенённых}} областей). Механизмы взаимодействия с глобальными переменными называют
Использование глобальных переменных имеет недостатки: глобальная переменная может быть изменена в любой точке программы (если она не находится в [[Защита памяти|защищённой памяти]] или объявлена как переменная {{не переведено|есть=:en:Read-only memory|надо=Read-only memory|текст=только для чтения}}), что может повлиять на работу других частей программы<ref>[[:en:William Wulf|William Wulf]] and Mary Shaw, “Global Variable [[:en:Considered Harmful|Considered harmful]]”, ACM SIGPLAN Notices, volume 8, issue 2, 1973 February, С. 28–34.</ref>. По этой причине глобальные переменные имеют неограниченный потенциал для создания взаимных зависимостей, что приводит к усложнению программы. Однако в некоторых случаях бывает полезно использовать глобальные переменные. Например, они могут быть использованы, чтобы избежать необходимости прохода часто используемых переменных через несколько функций. Глобальные переменные также затрудняют интеграцию [[Модуль (программирование)|модулей]], поскольку код, написанный ранее, может содержать глобальные переменные с теми же именами, что и во встраиваемом модуле.
Глобальные переменные широко используются для передачи данных между секциями кода, которые не участвуют в отношениях вызовов, такие как параллельные [[Поток выполнения|нити исполнения]] или [[обработка сигналов|обработчики сигналов]]. Без надлежащей блокировки (например, с помощью [[мьютекс]]а), код, использующий глобальные переменные, не будет [[Thread-safety|потокобезопасным]], за исключением переменных, доступных {{не переведено|есть=:en:Read-only memory|надо=Read-only memory|текст=только для чтения}} в [[Защита памяти|защищённой]] области памяти. С увеличением количества переменных и, соответственно, [[Блокировка (программирование)|блокировок]] увеличиваются вероятность [[Взаимная блокировка|взаимных блокировок]].
== См. также ==
|