0

既然C++有几个附加的带有std :: align_val_t参数的新的和删除操作符,那么它们的有效值是什么?对于C++分配器,std :: align_val_t有效的对齐值是什么?

他们是1,2,4,8,...等等?

是否有值的上限?

由编译器定义?

+1

我期望值与['alingas'](http://en.cppreference.com/w/cpp/language/alignas)相同 – StoryTeller

+0

@StoryTeller是否有一部分C++标准哪些说他们必须是相同的alignas?是什么让你期望他们是一样的? – LincolnMan

+0

那么,一个相似的目的。 – StoryTeller

回答

1

std::align_val_t及其约束在语言支持标头<new>的摘要中指定。所以,如果一个读[new.delete]它说以下内容:

除非另有规定,否则的 规定[basic.stc.dynamic]适用于运营商和新运营商 删除的库版本。 如果传递给这些函数的任何 的对齐参数的值不是有效的对齐值,则行为是 未定义。

所以,你必须通过一个值是有效的,在有效校准的定义在[basic.align]/4给出:

路线被表示为类型的std ::为size_t的值。有效的 对齐仅包括基本类型的对齐表达式 返回的值,以及可能为空的其他实现定义的 值集合。每个对齐值应为两个非负整数幂。

所以是的,只有两个幂加上你的实现明确允许的任何值。并且不要担心上面提到的std::size_tstd::align_val_t仅仅是一个枚举类std::size_t为基本类型:

enum class align_val_t : size_t {}; 

这也暗示了上限,你问一下,基本上std::numeric_limits<std::size_t>::max()。但是当然你的实现可能会执行一个较低的。

+0

谢谢。就其而言,这是很好的。你能回答我的问题的其他部分吗?支持的路线的上限值是多少? – LincolnMan

+0

@LincolnMan - 唯一的界限似乎是'std :: numeric_limits :: max()'。 – StoryTeller

相关问题