Namespaces
Variants

memalignment

From cppreference.net
Определено в заголовочном файле <stdlib.h>
size_t memalignment ( const void * p ) ;
(начиная с C23)

Возвращает максимальное выравнивание, удовлетворяемое предоставленным адресом. Возвращаемое значение может быть больше любого значения выравнивания, поддерживаемого реализацией. Если p является нулевым указателем, 0 возвращается, чтобы указать, что указатель не может быть использован для доступа к объекту любого типа.

Если возвращаемое значение сравнивается больше или равно alignof ( T ) , требование выравнивания для типа T удовлетворяется указателем.

Автономная реализация (freestanding implementation) должна предоставлять 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)

Смотрите также

выделяет выровненную память
(функция)
освобождает ранее выделенную память с указанным размером и выравниванием
(функция)