aligned_alloc
|
헤더 파일에 정의됨
<stdlib.h>
|
||
| (C11 이후) | ||
size 바이트의 초기화되지 않은 저장 공간을 할당하며, 그 정렬은 alignment 로 지정됩니다. size 매개변수는 alignment 의 정수 배수여야 합니다.
aligned_alloc
는 스레드 안전합니다: 이 함수는 인자를 통해 접근 가능한 메모리 위치만 접근하는 것처럼 동작하며, 정적 저장소는 접근하지 않습니다.
이전에
free
,
free_sized
, 그리고
free_aligned_sized
(C23부터)
또는
realloc
을 호출하여 메모리 영역을 해제하는 작업은
동기화됩니다
동일한 메모리 영역 전체 또는 일부를 할당하는
aligned_alloc
호출과. 이 동기화는 해제 함수에 의한 메모리 접근 이후, 그리고
aligned_alloc
에 의한 메모리 접근 이전에 발생합니다. 각 특정 메모리 영역에 대해 작동하는 모든 할당 및 해제 함수들은 단일 전체 순서를 가집니다.
목차 |
매개변수
| alignment | - | 정렬 방식을 지정합니다. 구현체에서 지원하는 유효한 정렬이어야 합니다. |
| size | - | 할당할 바이트 수. alignment 의 정수 배수여야 합니다. |
반환값
성공 시, 새로 할당된 메모리의 시작 포인터를 반환합니다. 메모리 누수를 방지하기 위해 반환된 포인터는 free 또는 realloc 으로 해제되어야 합니다.
실패 시, 널 포인터를 반환합니다.
참고 사항
size 가 alignment 의 정수 배가 아니거나, 유효하지 않거나 구현에서 지원하지 않는 alignment 를 전달하면 함수가 실패하고 널 포인터를 반환합니다 (C11 출판본에서는 이 경우 미정의 동작으로 명시되었으나, DR460 에서 수정됨). 제한적인 정렬 경계에서 작은 객체를 할당할 수 있도록 크기 제한을 제거하는 것( alignas 와 유사)이 N2072 에서 제안되었습니다.
"구현에 의해 지원됨" 요구 사항의 예시로, POSIX 함수
posix_memalign
는 2의 거듭제곱이면서
alignment
가
sizeof
(
void
*
)
의 배수인 모든 값을 수용하며, POSIX 기반
aligned_alloc
구현은 이 요구 사항을 상속합니다.
기본 정렬은 항상 지원됩니다. 만약
alignment
가 2의 거듭제곱이고
_Alignof
(
max_align_t
)
보다 크지 않다면,
aligned_alloc
은 단순히
malloc
을 호출할 수 있습니다.
일반적인
malloc
은 기본 정렬을 가진 모든 객체 타입에 적합하게 메모리를 정렬합니다.
aligned_alloc
은
SSE
, 캐시 라인, 또는
VM 페이지
경계와 같은 초과 정렬 할당에 유용합니다.
이 함수는 Microsoft C 런타임 라이브러리에서 지원되지 않습니다. 왜냐하면 해당 라이브러리의
std::free
구현체가
모든 종류의 정렬된 할당을 처리할 수 없기
때문입니다. 대신 MS CRT는
_aligned_malloc
(
_aligned_free
로 해제해야 함)을 제공합니다.
예제
가능한 출력:
default-aligned addr: 0x1e40c20 1024-byte aligned addr: 0x1e41000
참고문헌
- C23 표준 (ISO/IEC 9899:2024):
-
- 7.22.3.1 The aligned_alloc function (p: TBD)
- C17 표준 (ISO/IEC 9899:2018):
-
- 7.22.3.1 aligned_alloc 함수 (p: 253)
- C11 표준 (ISO/IEC 9899:2011):
-
- 7.22.3.1 aligned_alloc 함수 (p: 347-348)
참고 항목
|
C++ documentation
for
aligned_alloc
|