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>の概要で指定されています。 1は[new.delete]を読み込むのであれば、それは、次の言葉:特に指定のある場合を除き

、 の規定は、[basic.stc.dynamic] new演算子と delete演算子のライブラリのバージョンに適用されます。 これらの関数の に渡された整列引数の値が有効な整列値ではない場合、その動作は 未定義です。

だからあなたは、有効なアライメントの定義が[basic.align]/4で与えられている有効な値を渡す必要があります。

アラインメントは、型のstd :: size_t型の値として表現されています。有効な アラインメントには、基本タイプの式 のalignofで返された値と、追加の実装定義の 値のセット(空の場合がある)のみが含まれます。すべてのアラインメント値は、 の非負積分2乗でなければなりません。

したがって、実装で明示的に許可されている2の累乗と任意の値の累乗だけです。そして上記のstd::size_tの言及について心配しないでください。

enum class align_val_t : size_t {}; 

これはまた、あなたが本質的std::numeric_limits<std::size_t>::max()、について尋ねられた上限を意味しますstd::align_val_tは、単に基本的なタイプとしてstd::size_t持つ列挙型クラスです。もちろん、あなたの実装はより低いものを強制するかもしれません。

+0

ありがとうございます。それが行く限りそれは良いです。私の質問の他の部分に答えることができますか?サポートされているアライメントの上限値は何ですか? – LincolnMan

+0

@LincolnMan - 唯一のバウンドは 'std :: numeric_limits :: max()'のようです。 – StoryTeller

関連する問題