名前空間
変種
操作

std::assume_aligned

From cppreference.com
< cpp‎ | memory
 
 
メモリ管理ライブラリ
(説明用*)
未初期化メモリのアルゴリズム
(C++17)
(C++17)
(C++17)
制約付き未初期化
メモリアルゴリズム
Cライブラリ

アロケータ
メモリリソース
ガベージコレクションのサポート
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
未初期化ストレージ
(C++20まで*)
(C++20まで*)
明示的な生存期間管理
 
ヘッダ <memory> で定義
template< std::size_t N, class T >
constexpr T* assume_aligned( T* ptr );
(C++20以降)

実装に対し、ptr が指すオブジェクトが少なくとも N にアラインされていることを通知します。実装はこの情報を使ってより効率的なコードを生成できますが、この仮定はオブジェクトが assume_aligned の戻り値を介してアクセスされる場合にのみ適用されることがあります。

N は2の累乗でなければなりません。ptr が型 T のオブジェクトを指していない場合 (すべてのレベルで cv-qualification を無視)、またはオブジェクトのアライメントが少なくとも N でない場合、動作は未定義です。

目次

[編集] 戻り値

ptr.

[編集] 例外

何もスローしません。

[編集] 備考

assume_aligned によって有効になる最適化からプログラムが恩恵を受けることを確実にするには、戻り値を介してオブジェクトにアクセスすることが重要です。

void f(int* p)
{
    int* p1 = std::assume_aligned<256>(p);
    // Use p1, not p, to ensure benefit from the alignment assumption.
    // However, the program has undefined behavior if p is not aligned
    // regardless of whether p1 is used.
}

アライメントの仮定が実際に成り立つことを保証するのはプログラム次第です。assume_aligned の呼び出しは、コンパイラがこれを検証したり強制したりすることはありません。

機能テストマクロ 規格 機能
__cpp_lib_assume_aligned 201811L (C++20) std::assume_aligned

[編集]

[編集] 関連項目

alignof (C++11) 型のアライメント要件を問い合わせる
(演算子)[編集]
alignas (C++11) 変数用のストレージを特定の量でアラインすることを指定します。
(指定子)[編集]
(C++11以降)(C++23で非推奨)
与えられたサイズの型の未初期化ストレージとして使用するのに適した型を定義する
(クラステンプレート) [編集]
(C++11)
バッファ内のポインタをアラインします
(関数) [編集]
[[assume(expression)]]
(C++23)
特定の時点でexpressionが常にtrueに評価されることを指定します
(属性指定子)[編集]
English 日本語 中文(简体) 中文(繁體)