Предположим, что у нас агрессивный аллокатор/пул, который умеет в очень быстрое выделение и переиспользование памяти Речь в первую очередь о вызовах
Вызов аллокатора рядом с кэшмиссом ходит. Конкретные числа на конкретных примерах. Мне не нравится подход с закрытием из общих соображений, но вряд ли будет медленнее, если не эксплуатируется перемещение
Диспетчеризация variant это вызов одной из сгенерированных прокси функций по номеру. Диспетчеризация function вызов той же proxy функции по указателю который лежит в самой function.
Был вопрос: могут ли модули заменить std::funtion. Ответ: нет, так как std::function дает type erasure и используется именно из-за него. Дальнейшая дискуссия уходит глубоко в теорию без каких либо объяснений как на практике variant может заменить type erasure.
Диспетчеризация variant это вызов одной из сгенерированных прокси функций по номеру. Диспетчеризация function вызов той же proxy функции по указателю который лежит в самой function.
Был вопрос: могут ли модули заменить std::funtion. Ответ: нет, так как std::function дает type erasure и используется именно из-за него. Дальнейшая дискуссия уходит глубоко в теорию без каких либо объяснений как на практике variant может заменить type erasure.
Не понимаете что, что СЕО никогда не поставит вам задачу написать однопоточный экзекютор?)
Диспетчеризация variant это вызов одной из сгенерированных прокси функций по номеру. Диспетчеризация function вызов той же proxy функции по указателю который лежит в самой function.
Ну switch все-таки отличается от виртуального вызова
Нет разницы, цепочка if (x == 0) else if (x == 1) не только имеет шанс оптимизироваться, но и, скажем, наглядно продемонстрирует компилятору отсутствие барьеров памяти в вызываемом коде
Нет разницы, цепочка if (x == 0) else if (x == 1) не только имеет шанс оптимизироваться, но и, скажем, наглядно продемонстрирует компилятору отсутствие барьеров памяти в вызываемом коде