От того, как вы используете данные, хранящиеся в ваших переменных, зависит больше производительности, чем от того, как вы их объявляете. Я не уверен насчет правильной терминологии, но можно определить два типа доступа к данным. Общий доступ (когда вы получаете доступ к одним и тем же данным из разных частей кода) и личные данные, где каждая часть имеет свои собственные данные. По умолчанию глобальные переменные подразумевают общий доступ, а локальные - частный доступ. Но оба типа доступа могут быть достигнуты с обоими типами переменных (то есть локальные указатели, указывающие на один и тот же кусок памяти, или глобальный массив, где каждая часть кода обращается к разной части массива).
Общий доступ имеет лучшее кэширование, меньший объем памяти, но его сложнее оптимизировать, особенно в многопоточной среде. Это также плохо для масштабирования, особенно с архитектурой NUMA ..
Частный доступ легче оптимизировать и лучше масштабировать. Проблемы с частным доступом обычно существуют в ситуации, когда у вас есть несколько копий одних и тех же данных. Проблемы, обычно связанные с этим сценарием, заключаются в увеличении занимаемой памяти, синхронизации между копиями, ухудшении кеширования и т. Д.