std::assume_aligned
来自 cppreference.cn
定义于头文件 <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
不会导致编译器验证或强制执行此操作。
特性测试 宏 | 值 | Std | 特性 |
---|---|---|---|
__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 (属性说明符) |