Эффект производительности глобальных переменных (c, c ++)

В настоящее время я разрабатываю очень быстрый алгоритм, одна из его частей - чрезвычайно быстрый сканер и статистическая функция. В этом квесте я стремлюсь к увеличению производительности. Поэтому я также заинтересован в том, чтобы код был «многопоточным».

Теперь вопрос: Я заметил, что помещение некоторых очень часто используемых переменных и массивов в «Global» или «static local» (что делает то же самое) дает ощутимое преимущество в производительности (в диапазоне + 10%). Я пытаюсь понять, почему, и найти решение по этому поводу, поскольку я бы предпочел избегать использования этих типов распределения. Обратите внимание, что я не думаю, что разница связана с «распределением», поскольку выделение нескольких переменных и небольшого массива в стеке происходит практически мгновенно. Я считаю, что разница заключается в «доступе» и «изменении» данных.

В ходе этого поиска я нашел эту старую запись из stackoverflow: Производительность глобальных переменных в C ++

Но я очень разочарован полученными там ответами. Очень мало объяснений, в основном разглагольствования о том, что «вы не должны этого делать» (эй, это не вопрос!) И очень грубые утверждения, такие как «это не влияет на производительность», что явно неверно, поскольку я измеряю это с точностью инструменты тестирования.

Как было сказано выше, я ищу объяснение и, если оно существует, решение этой проблемы. Пока что у меня такое ощущение, что вычисление адреса памяти локальной (динамической) переменной стоит немного больше, чем глобальная (или локальная статическая). Может быть, что-то вроде разницы в операции ADD. Но это не помогает найти решение ...

14
задан Community 23 May 2017 в 12:01
поделиться