Namespaces
Variants

std:: assume_aligned

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
定義済みヘッダー <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修飾を無視)、またはオブジェクトのアライメントが少なくとも N でない場合、動作は未定義です。

目次

戻り値

ptr .

例外

例外を送出しません。

注記

assume_aligned による最適化をプログラムが確実に活用するためには、その戻り値を介してオブジェクトにアクセスすることが重要です:

void f(int* p)
{
    int* p1 = std::assume_aligned<256>(p);
    // p1を使用し、pは使用しないことで、アライメント仮定の恩恵を確実に得る。
    // ただし、p1が使用されるかどうかに関わらず、pがアラインされていない場合、
    // プログラムは未定義動作となる。
}

アライメントの仮定が実際に成立することを保証するのはプログラムの責任です。 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)
指定された時点で が常に true と評価されることを指定する
(属性指定子)