std:: assume_aligned
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Определено в заголовке
<memory>
|
||
|
template
<
std::
size_t
N,
class
T
>
constexpr T * assume_aligned ( T * ptr ) ; |
(начиная с C++20) | |
Сообщает реализации, что объект, на который указывает
ptr
, выровнен как минимум на
N
. Реализация может использовать эту информацию для генерации более эффективного кода, но может делать это предположение только если доступ к объекту осуществляется через возвращаемое значение
assume_aligned
.
N
должна быть степенью двойки. Поведение не определено, если
ptr
не указывает на объект типа
T
(игнорируя cv-квалификаторы на каждом уровне), или если выравнивание объекта меньше
N
.
Содержание |
Возвращаемое значение
ptr .
Исключения
Ничего не выбрасывает.
Примечания
Чтобы программа могла воспользоваться оптимизациями, предоставляемыми
assume_aligned
, важно обращаться к объекту через возвращаемое значение:
void f(int* p) { int* p1 = std::assume_aligned<256>(p); // Используйте p1, а не p, чтобы гарантировать выгоду от предположения о выравнивании. // Однако программа имеет неопределенное поведение, если p не выровнен, // независимо от того, используется ли p1. }
Программа сама должна обеспечивать выполнение предположения о выравнивании. Вызов
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
в данной точке
(спецификатор атрибута) |