Глобальная переменная: различия между версиями

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
опечатка в слове "программирования"
пунктуация
Строка 1:
'''Глобальная переменная''' в [[программирование|программировании]] — [[Переменная (программирование)|переменная]], [[Область видимости|областью видимости]] которой является вся программа, кроме специально {{iw|Затенение переменных|затенённых областей|en|Variable shadowing}}. Механизмы взаимодействия с глобальными переменными называют механизмами доступа к глобальному окружению или состоянию ({{lang-en|global environment}}, {{lang-en2|global state}}). Глобальные переменные могут использоваться для взаимодействия между процедурами и функциями как альтернатива передачи аргументов и возвращения значений<ref name="Керниган"> ''Керниган и Ритчи'' Язык программирования Си — С. 44, 87.</ref>.
 
Использование глобальных переменных имеет недостатки: глобальная переменная может быть изменена в любой точке программы (если она не находится в [[Защита памяти|защищённой памяти]] или объявлена как переменная {{iw|память только для чтения|только для чтения|en|Read-only memory}}), что может повлиять на работу других частей программы<ref>William Wulf and Mary Shaw, «Global Variable Considered harmful», ACM SIGPLAN Notices, volume 8, issue 2, 1973 February, С. 28-34.</ref>. По этой причине глобальные переменные имеют неограниченный потенциал для создания взаимных зависимостей, что приводит к усложнению программы. Однако в некоторых случаях бывает полезно использовать глобальные переменные. Например, они могут быть использованы, чтобы избежать необходимости прохода часто используемых переменных через несколько функций. Глобальные переменные также затрудняют интеграцию [[Модуль (программирование)|модулей]], поскольку код, написанный ранее, может содержать глобальные переменные с теми же именами, что и во встраиваемом модуле.
 
Глобальные переменные широко используются для передачи данных между секциями кода, которые не участвуют в отношениях вызовов, такие как параллельные [[Поток выполнения|нити исполнения]] или [[обработка сигналов|обработчики сигналов]]. Без надлежащей блокировки (например, с помощью [[мьютекс]]а), код, использующий глобальные переменные, не будет [[Thread-safety|потокобезопасным]], за исключением переменных, доступных только для чтения в [[Защита памяти|защищённой области памяти]]. С увеличением количества переменных и, соответственно, [[Блокировка (программирование)|блокировок]] увеличиваются вероятность [[Взаимная блокировка|взаимных блокировок]].