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
的调用不会导致编译器验证或强制执行此操作。
特性测试宏 | 值 | 标准 | 特性 |
---|---|---|---|
__cpp_lib_assume_aligned |
201811L |
(C++20) | std::assume_aligned
|
[编辑] 示例
本节不完整 原因:无示例 |
[编辑] 参阅
alignof (C++11) |
查询类型的对齐要求 (运算符) |
alignas (C++11) |
指定变量的存储应按特定量对齐 (说明符) |
(自 C++11)(C++23 中已弃用) |
定义适合用作给定大小类型的未初始化存储的类型 (类模板) |
(C++11) |
在缓冲区中对齐指针 (函数) |
[[assume(expression)]] (C++23) |
指定 expression 在给定点将始终评估为 true (属性说明符) |