Требуется ли, чтобы каждый тип из стандартной библиотеки имел фундаментальное требование выравнивания?
Нет такого требования.
Могут ли типы в стандартной библиотеке бытьВыровнен?
Да.Вот пример, который передает на конкретную систему, например.Он демонстрирует тип со смещением, который является экземпляром стандартного шаблона библиотеки:
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 поддерживается ли более выровненное новое, определяется реализацией, даже если реализация поддерживает более выровненные типы.