memalignment
Определено в заголовочном файле <stdlib.h> | ||
|---|---|---|
size_t memalignment( const void *p ); | (начиная с C23) |
Возвращает максимальное выравнивание, которому соответствует предоставленный адрес. Возвращаемое значение может быть больше любого значения выравнивания, поддерживаемого реализацией. Если p является нулевым указателем, возвращается 0, указывая на то, что указатель нельзя использовать для доступа к объекту любого типа.
Если возвращаемое значение больше или равно alignof(T), указатель удовлетворяет требованиям к выравниванию типа T.
Автономная реализация должна предоставлять memalignment.
Параметры
| p | - | указатель, для которого нужно определить выравнивание |
Возвращаемое значение
Значение выравнивания p или 0, если p является нулевым указателем.
Примечания
На распространённых платформах, где
- нулевые указатели преобразуются в целое число
0, - значения указателей напрямую преобразуются в числовые значения виртуальных адресов, и
-
size_tсовпадает сuintptr_t,
эту функцию можно реализовать как return (size_t)p & -(size_t)p;.
Пример
#include <stdio.h>
#include <stdlib.h>
int main()
{
alignas(128) int i = 0;
printf("%zu\n%zu\n", memalignment(nullptr), memalignment(&i));
}
Возможный вывод:
0 128
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
- 7.24.9.1 Функция memalignment (стр. 374)
См. также
|
(C11) | выделяет выровненную память (функция) |
|
(C23) | освобождает ранее выделенную память заданного размера с заданным выравниванием (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/program/memalignment