名稱空間
變體
操作

std::assume_aligned

來自 cppreference.com
< cpp‎ | 記憶體
 
 
記憶體管理庫
(僅作說明*)
未初始化記憶體演算法
(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 限定符),或者物件的對齊方式不至少為 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
(屬性說明符)[編輯]