Namespaces
Variants

std:: assume_aligned

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
定义于头文件 <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
(属性说明符)