c++ - 标准库中的类型可以过度对齐吗?
问题描述
我试图弄清楚理论上 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>) > alignof(std::max_align_t));
如果类型过度对齐,我就不能使用普通的 malloc/new 了。
new
如果首先支持扩展对齐,则可以使用自 C++17 以来的过度对齐类型。在 C++11 中,是否支持过度对齐的 new 是实现定义的,即使实现确实支持过度对齐的类型。
推荐阅读
- reactjs - 更新记录时尝试显示输入列表的问题
- javascript - 如何在 JavaScript 中产生返回一个交互对象?
- python - 如何绘制 LSTM 结果?
- javascript - 在 HTML 页面中使用 NPM 依赖项
- xml - 使用 XSLT 将 XML 转换为 CSV - 展平并匹配到模板
- python - 我应该使用什么类型的文件来保存我的应用程序信息?
- javascript - 设置谷歌地图 LatLng 值 Javascrjpt
- python - AttributeError: 'DataFrame' 对象在运行 summary_data_from_transaction_data() 后没有属性 'ix'
- vue.js - 在 vue devtools 中单击该组件时出现组件数据
- r - 在 R 中使用 glm 函数时出现因子错误