std:: assume_aligned
From cppreference.net
C++
Memory management library
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
定义于头文件
<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,以确保从对齐假设中获益。 // 然而,无论是否使用 p1,如果 p 未对齐,程序将具有未定义行为。 }
程序需要自行确保对齐假设实际成立。调用
assume_aligned
不会导致编译器验证或强制执行此假设。
| 功能测试 宏 | 值 | 标准 | 功能 |
|---|---|---|---|
__cpp_lib_assume_aligned
|
201811L
|
(C++20) |
std::assume_aligned
|
示例
|
本节内容不完整
原因:缺少示例 |
参见
alignof
(C++11)
|
查询类型的对齐要求
(运算符) |
alignas
(C++11)
|
指定变量的存储应按特定量对齐
(说明符) |
|
(since C++11)
(deprecated in C++23)
|
定义适合用作给定大小类型的未初始化存储的类型
(类模板) |
|
(C++11)
|
在缓冲区中对齐指针
(函数) |
[[
assume
(
expression
)]]
(C++23)
|
指定
表达式
在给定点始终求值为
true
(属性说明符) |