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); // 用 p1 而非 p,以确保从对齐假设受益。 // 然而,若 p 未对齐则程序有未定义行为,无关乎是否使用 p1。 }
交给程序员确保对齐假设确实成立。调用 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(表达式)]] (C++23)
|
指示 表达式 在给定的位置永远为 true (属性指示符) |