Могут ли типы в стандартной библиотеке быть выровнены? - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь выяснить, может ли какой-либо тип / класс / структура / и т. Д. В стандартной библиотеке C ++ (например, std :: vector или std :: thread) в теории быть слишком выровненным (alignof (T)> alignof (max_align_t)).Это не ясно для меня из спецификации.Требуется ли, чтобы каждый тип из стандартной библиотеки имел фундаментальное требование выравнивания?

1 Ответ

1 голос
/ 29 сентября 2019

Требуется ли, чтобы каждый тип из стандартной библиотеки имел фундаментальное требование выравнивания?

Нет такого требования.

Могут ли типы в стандартной библиотеке бытьВыровнен?

Да.Вот пример, который передает на конкретную систему, например.Он демонстрирует тип со смещением, который является экземпляром стандартного шаблона библиотеки:

constexpr std::size_t overaligned = alignof(std::max_align_t) * 2;
struct alignas(overaligned) test {};
static_assert(alignof(std::array<test, 1>) > alignof(std::max_align_t));

Если тип выровнен, то я не могу использовать для него обычный malloc / new.

Вы можете использовать new для более выровненных типов, начиная с C ++ 17, если в первую очередь поддерживается расширенное выравнивание.В C ++ 11 поддерживается ли более выровненное новое, определяется реализацией, даже если реализация поддерживает более выровненные типы.

...