首页 > 解决方案 > 标准库中的类型可以过度对齐吗?

问题描述

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

标签: c++memory-alignment

解决方案


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

没有这样的要求。

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

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

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 中,是否支持过度对齐的 new 是实现定义的,即使实现确实支持过度对齐的类型。


推荐阅读