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/program/memalignment

Spec-Zone.ru

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