std::assume_aligned
來自 cppreference.com
定義於標頭檔案 <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); // 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 (屬性說明符) |