std::assume_aligned
定义于头文件 <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
不导致编译器检查或强制这点。