Пространства имён
Варианты
Действия

std::assume_aligned

Материал из cppreference.com
< cpp‎ | memory
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм(C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования(C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Динамическое управление памятью
no section name
Ограниченные алгоритмы неинициализированной памяти
no section name
Поддержка сбора мусора
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)



no section name
 
Определено в заголовочном файле <memory>
template<std::size_t N, class T >
[[nodiscard]]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, чтобы убедиться в преимуществах предположения выравнивания.// Однако программа имеет неопределённое поведение, если p не выровнен, независимо// от того, используется ли p1.}

Программа должна гарантировать, что предположение выравнивания действительно выполняется. Вызов assume_aligned не заставляет компилятор проверять или применять это.

Макрос Тестирования функциональностиЗначениеСтандартФункциональность
__cpp_lib_assume_aligned201811L(C++20)std::assume_aligned

[править]Пример

[править]Смотрите также

оператор alignof(C++11) запрашивает требования к выравниванию типа[править]
спецификатор alignas(C++11) указывает, что хранилище для переменной должно быть выровнено на определённую величину[править]
(C++11)(устарело в C++23)
определяет тип, подходящий для использования в качестве неинициализированного хранилища для типов заданного размера
(шаблон класса)[править]
(C++11)
выравнивает указатель в буфере
(функция)[править]
[[assume]](C++23) указывает, что выражение всегда будет оцениваться как true в данной точке
(спецификатор атрибута)[править]
close