std::assume_aligned
Определено в заголовочном файле <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_aligned | 201811L | (C++20) | std::assume_aligned |
[править]Пример
Этот раздел не завершён Причина: нет примера |
[править]Смотрите также
оператор alignof (C++11) | запрашивает требования к выравниванию типа |
спецификатор alignas (C++11) | указывает, что хранилище для переменной должно быть выровнено на определённую величину |
(C++11)(устарело в C++23) | определяет тип, подходящий для использования в качестве неинициализированного хранилища для типов заданного размера (шаблон класса) |
(C++11) | выравнивает указатель в буфере (функция) |
[[assume]] (C++23) | указывает, что выражение всегда будет оцениваться как true в данной точке (спецификатор атрибута) |