байтов: std::byte raw[16] и функции доступа к верхней и нижней частям а-ля std::int64& get_hi();
2) Вариант с двумя членами класса: std::int64_t hi; std::uint64_t lo;
В первом случае alignof(…) равняется 1, из-за внутренней структуры. Во втором - alignof(…) == 8. В самых простых случаях (сложение таких чисел, битовые сдвиги, разные варианты конструкторов) ассемблер тестов выходит одинаковый по инструкциям (g++ 11.x -O2 -mavx2 -std=c++17), бенчмарки показывают одинаковую скорость (+-3%).
Вопрос: Какой вариант лучше выбрать с точки зрения переносимости и скорости работы?
Для начала есть ответ на вопрос: чем не подошел вариант реализации из boost, например? Цель своей имплементации какая?
Обсуждают сегодня