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 в данной точке(спецификатор атрибута) |