std:: assume_aligned
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
定義済みヘッダー
<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
と評価されることを指定する
(属性指定子) |