std::assume_aligned — cppreference.com
Материал из cppreference.com
<tbody> </tbody>
| Определено в заголовочном файле |
||
|
|
(начиная с 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 в данной точке(спецификатор атрибута)[править] |