标准库中的类型可以过度对齐吗?

问题描述 投票:0回答:1

我试图找出理论上C ++标准库中的任何类型/类/结构/等(例如std :: vector或std :: thread)是否可能过度对齐(alignof(T)> alignof(max_align_t ))。从规格上对我来说还不清楚。是否要求标准库中的每种类型都具有基本对齐要求?

c++ memory-alignment
1个回答
0
投票

是否要求标准库中的每种类型都具有基本对齐要求?

没有这样的要求。

标准库中的类型可以过度对齐吗?

是。这是例如在特定系统上传递的示例。它演示了作为标准库模板实例的过度对齐类型:

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是否定义了任何扩展的对齐方式。

© www.soinside.com 2019 - 2024. All rights reserved.