Я кодирую навязчивую структуру данных и задаюсь вопросом, использовать ли базовые или членские хуки. Поскольку код будет вызываться много раз, мой вопрос касается производительности и степени, в которой компиляторы могут встроить такой код.
Базовые хуки основаны на наследовании, в то время как хуки членов используют указатели на члены через параметры шаблона.
Мой выбор дизайна — использование хуков-членов, но мой опыт говорит, что указатели гораздо сложнее оптимизировать, чем статический код. С другой стороны, все эти указатели известны во время компиляции, и, возможно, компилятор может сделать некоторую магию, чтобы проанализировать, что происходит.
У кого-нибудь есть опыт с этим? Любые данные, подсказки или ссылки приветствуются.
Что касается большинства «X против Y, что быстрее?» На этот вопрос есть только один правильный ответ:
Задайте свой профиль.
Опыт неясен. Человеческое предположение не может принять во внимание все мельчайшие детали и подводные камни оптимизации компилятора. Компиляторы отличаются тем, что они могут оптимизировать и насколько хорошо они это делают. Иногда даже между разными версиями одного и того же компилятора. Единственное, что может сказать тебе хорошо, как ваш реализации могут быть оптимизированы ваш определенный компилятор (ы) на ваш конкретная платформа (ы) — это правильное измерение производительности с типичными размерами проблем.
Четное если есть кто-то, кто говорит вам, что он знает, что быстрее, и дает вам несколько красивых графиков: можете ли вы доверять ему достаточно, чтобы не сделать эти измерения? Он знает, как выглядит ваша конкретная среда? Учитывает ли он и его графики особые угловые случаи ваших проблем? Скорее всего нет.
Поскольку данные и хуки находятся в «имеет» отношение, я бы также предпочел хуки членов с точки зрения дизайна. Я также не думаю, что есть разница в оптимизации между помещением хуков в базовый класс и их непосредственным добавлением в класс.
Существует также некоторое рассмотрение об этих различных подходах в Повысить навязчивость.