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); // 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(expression)]] (C++23) |
指定在给定点,表达式将始终计算为true。 (属性说明符) |