std::assume_aligned
来自cppreference.com
| 定义于头文件 <memory>
|
||
| template< std::size_t N, class T > [[nodiscard]] 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 ,以确保从对齐假设受益。 // 然而,若 p 未对齐则程序有未定义行为,无关乎是否使用 p1 。 }
交给程序员确保对齐假设确实成立。调用 assume_aligned 不导致编译器检查或强制这点。