Обобщение с использованием макрокоманды: почему плохо используется кэш инструкций? - PullRequest
0 голосов
/ 31 января 2020

Russ Cox (Go core dev) в своем блоге о реализации generi c, о которой упоминалось ниже о методе расширения макросов (C ++) для реализации обобщений -

Отдельные специализации могут быть эффективными, но программа в целом может пострадать из-за плохого использования кэша инструкций

Я размышлял над этим утверждением в течение нескольких дней, но не смог понять причину этого. Есть ли какая-либо разумная причина этого предположения?

Я понимаю, что кэш инструкций не будет использоваться должным образом (относительно), если у нас будет -

  1. Плохая локализация ссылок на инструкции
  2. Плохой прогноз ветвления.

Вызывает ли расширение макросов что-либо из этого?

Обновление : аналогичное обсуждение в Go Generi c Краткое содержание обсуждения . Здесь они обобщили технику, используемую в C ++, как Специализация типов

1 Ответ

1 голос
/ 31 января 2020

Каждый экземпляр шаблона фактически является отдельным классом. Если вы используете std::vector<int> и std::vector<float>, вы получите две полные копии векторной реализации (по этой причине большинство стандартных библиотек пытаются переместить как можно больше кода из вектора в базовый класс или в частный класс реализации). но некоторое дублирование остается). При использовании (до) вдвое больше кода кэши инструкций будут заполняться в два раза быстрее.

...