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
不导致编译器检查或强制这点。
参阅
alignof 运算符(C++11)
|
查询类型的对齐要求 |
alignas 说明符(C++11)
|
指定该变量的存储应该按指定量对齐 |
(C++11) |
定义适于用作给定大小的类型的未初始化存储的类型 (类模板) |
(C++11) |
对齐缓冲区中的指针 (函数) |