既然C++有几个附加的带有std :: align_val_t参数的新的和删除操作符,那么它们的有效值是什么?对于C++分配器,std :: align_val_t有效的对齐值是什么?
他们是1,2,4,8,...等等?
是否有值的上限?
由编译器定义?
既然C++有几个附加的带有std :: align_val_t参数的新的和删除操作符,那么它们的有效值是什么?对于C++分配器,std :: align_val_t有效的对齐值是什么?
他们是1,2,4,8,...等等?
是否有值的上限?
由编译器定义?
std::align_val_t
及其约束在语言支持标头<new>
的摘要中指定。所以,如果一个读[new.delete]它说以下内容:
除非另有规定,否则的 规定[basic.stc.dynamic]适用于运营商和新运营商 删除的库版本。 如果传递给这些函数的任何 的对齐参数的值不是有效的对齐值,则行为是 未定义。
所以,你必须通过一个值是有效的,在有效校准的定义在[basic.align]/4给出:
路线被表示为类型的std ::为size_t的值。有效的 对齐仅包括基本类型的对齐表达式 返回的值,以及可能为空的其他实现定义的 值集合。每个对齐值应为两个非负整数幂。
所以是的,只有两个幂加上你的实现明确允许的任何值。并且不要担心上面提到的std::size_t
。 std::align_val_t
仅仅是一个枚举类std::size_t
为基本类型:
enum class align_val_t : size_t {};
这也暗示了上限,你问一下,基本上std::numeric_limits<std::size_t>::max()
。但是当然你的实现可能会执行一个较低的。
谢谢。就其而言,这是很好的。你能回答我的问题的其他部分吗?支持的路线的上限值是多少? – LincolnMan
@LincolnMan - 唯一的界限似乎是'std :: numeric_limits
我期望值与['alingas'](http://en.cppreference.com/w/cpp/language/alignas)相同 – StoryTeller
@StoryTeller是否有一部分C++标准哪些说他们必须是相同的alignas?是什么让你期望他们是一样的? – LincolnMan
那么,一个相似的目的。 – StoryTeller