Spec-Zone.ru › C++

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 должно быть степенью двойки. Поведение не определено, если ptr не указывает на объект типа T (игнорируя cv-квалификацию на каждом уровне) или если выравнивание объекта не составляет как минимум N.

Возвращаемое значение

ptr.

Исключения

Ничего не выбрасывает.

Примечания

Чтобы программа извлекла выгоду из оптимизаций, включённых в assume_aligned, важно обращаться к объекту через его возвращаемое значение:

void f(int* p)
{
    int* p1 = std::assume_aligned<256>(p);
    // Use p1, not p, to ensure benefit from the alignment assumption.
    // However, the program has undefined behavior if p is not aligned
    // regardless of whether p1 is used.
}

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

Макрос проверки возможностей Значение Стандарт Функция
__cpp_lib_assume_aligned 201811L (C++20) std::assume_aligned

Пример

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/memory/assume_aligned

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API