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

std::assume_aligned

Материал из cppreference.com
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, 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++14)
(C++11)
(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
 
<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)
определяет тип, подходящий для использования в качестве неинициализированного хранилища для типов заданного размера
(шаблон класса) [править]
(C++11)
выравнивает указатель в буфере
(функция) [править]
[[assume]](C++23) указывает, что выражение всегда будет оцениваться как true в данной точке
(спецификатор атрибута)[править]