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 의 정렬 값, 또는 p 가 널 포인터 값인 경우 0 입니다.

참고 사항

일반적인 플랫폼에서

  • 널 포인터는 정수 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 The memalignment function (p: 374)

참고 항목

정렬된 메모리를 할당함
(함수)
이전에 할당된 크기 지정 및 정렬된 메모리를 해제함
(함수)