◐ Shell
clean mode source ↗

std::assume_aligned — cppreference.com

Материал из cppreference.com

<tbody> </tbody>

Определено в заголовочном файле <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)

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