В настоящее время я разрабатываю очень быстрый алгоритм, причем одна его часть представляет собой чрезвычайно быстрый сканер и функцию статистики. В этом квесте я получаю любое преимущество в производительности. Поэтому я также заинтересован в поддержании дружественного кода "multi-thread".
Теперь вопрос: я заметил, что включение очень часто используемых переменных и массивов в "Глобальный" или "статический локальный" (что делает то же самое), существует измеримое преимущество в производительности (в диапазоне + 10%). Я пытаюсь понять, почему, и найти решение об этом, так как я предпочел бы избежать использования этих типов распределения. Обратите внимание, что я не думаю, что разница происходит от "распределения", так как выделение нескольких переменных и небольшого массива в стеке почти мгновенно. Я считаю, что разница связана с "доступом" и "изменением" данных.
В этом поиске я нашел это старое сообщение из stackoverflow: С++ производительность глобальных переменных
Но я очень разочарован ответами там. Очень мало объяснений, в основном разглагольствования о том, "вы не должны этого делать" (эй, это не вопрос!) И очень грубые высказывания, такие как "это не влияет на производительность", что явно неверно, поскольку я измеряю его с точными контрольные инструменты.
Как было сказано выше, я ищу объяснение и, если оно существует, решение этой проблемы. До сих пор у меня было ощущение, что вычисление адреса памяти локальной (динамической) переменной стоит немного больше, чем глобальный (или локальный статический). Возможно, что-то вроде разницы в работе ADD. Но это не помогает найти решение...