现在C ++有几个额外的带有std :: align_val_t参数的new和delete运算符,它们的有效值是什么?
他们是1,2,4,8 ......等等吗?
值是否有上限?
由编译器定义?
答案 0 :(得分:3)
std::align_val_t
及其约束在语言支持标题<new>
的概要中指定。因此,如果有人阅读[new.delete],则说明以下内容:
除另有规定外,其他规定 [basic.stc.dynamic]适用于operator new和的库版本 运营商删除。 如果对齐参数的值传递给any 这些函数不是有效的对齐值,行为是 未定义。强>
所以你必须传递一个有效的值,其中[basic.align]/4给出了有效对齐的定义:
对齐表示为std :: size_t类型的值。有效 对齐仅包括alignof表达式返回的值 对于基本类型加上另外的实现定义 值集,可能为空。每个对齐值应为a 二的非负整数幂。
所以是的,只有2的幂加上你的实现明确允许的任何值。不要担心上面提到的std::size_t
。 std::align_val_t
只是一个以std::size_t
为基础类型的枚举类:
enum class align_val_t : size_t {};
这也意味着你问的上限,基本上是std::numeric_limits<std::size_t>::max()
。但当然,您的实施可能会强制执行较低的实施。