我试图找出理论上C ++标准库中的任何类型/类/结构/等(例如std :: vector或std :: thread)是否可能过度对齐(alignof(T)> alignof(max_align_t ))。从规格上对我来说还不清楚。是否要求标准库中的每种类型都具有基本对齐要求?
是否要求标准库中的每种类型都具有基本对齐要求?
没有这样的要求。
标准库中的类型可以过度对齐吗?
是。这是例如在特定系统上传递的示例。它演示了作为标准库模板实例的过度对齐类型:
constexpr std::size_t overaligned = alignof(std::max_align_t) * 2;
struct alignas(overaligned) test {};
static_assert(alignof(std::array<test, 1>) == overaligned);
如果类型过度对齐,那么我不能使用普通的malloc / new。
自C ++ 17起,您可以在过度对齐的类型上使用new
。 是否定义了任何扩展的对齐方式。