Lite_stream
@Lite_stream

Нужно ли здесь выравнивание на стеке?

Код:
if constexpr (std::is_trivial_v<Entry<K, V>>)
    {
         // TODO: Если выравнивание на стеке tmpObj != выравниванию Entry<K, V> ? Применить: std::aligned_storage ?
         std::byte tmpObj[sizeof(Entry<K, V>)];
         std::memcpy(tmpObj, &buffer[curElemPos], sizeof(Entry<K, V>));
         std::memcpy(&buffer[curElemPos], &buffer[parentPos], sizeof(Entry<K, V>));
         std::memcpy(&buffer[parentPos], tmpObj, sizeof(Entry<K, V>));
     }
 else
    {
          std::swap(buffer[curElemPos], buffer[parentPos]);
    }


Прежположим у Entry выравнивание, например, 128. Могут ли быть какие-либо проблемы, не заиспользовав std::aligned_storage ? Вроде бы tmp просто временный объект на стеке и всё ок должно быть
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Раз вы просто копируете через memcpy, то никаких проблем не должно быть.
А еще, вы уверены что std::swap сам эту оптимизацию уже не применяет? Зачем вы какие-то свои велосипеды строите?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы