Spec-Zone.ru › C

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)

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/memory/memalignment

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API