`free_aligned_sized` — 크기와 정렬을 아는 상태에서 메모리를 해제하는 함수
free_aligned_sized — 크기와 정렬을 아는 상태에서 메모리를 해제하는 함수 (C23)
free_sized가 "크기를 아는 해제"였다면, free_aligned_sized는 그 위에 정렬 정보까지 함께 넘기는 함수예요. 특히 aligned_alloc으로 할당한 정렬 메모리를 해제할 때 쓰입니다.
본문
free_aligned_sized는 ptr이 널 포인터이거나, aligned_alloc을 호출해서 얻은 결과이고 — 이때 alignment가 요청했던 할당 정렬과 같고 size가 요청했던 할당 크기와 같다면 — free(ptr)과 동등해요. 그렇지 않은 경우 동작은 정의되지 않습니다.
문법
#include <stdlib.h>
void free_aligned_sized( void *ptr, size_t alignment, size_t size ); // (C23부터)
설명
malloc, calloc, realloc 호출의 결과는 free_aligned_sized에 넘길 수 없어요.
free_aligned_sized는 free_* 계열이 공유하는 스레드 안전성 규칙을 따릅니다. 인자를 통해 보이는 메모리 위치만 접근하는 것처럼 동작하고, 한 영역의 메모리를 해제하는 호출은 같은 영역이나 그 일부를 할당하는 이후의 어떤 할당 함수 호출과도 동기화됩니다.
매개변수
| 매개변수 | 설명 |
|---|---|
ptr |
해제할 메모리를 가리키는 포인터 |
alignment |
해제할 메모리의 정렬 |
size |
해제할 메모리의 크기 |
반환값
없음.
예시
원문에는 아직 예시가 준비되지 않았어요("no example" 상태). 다만 사용 패턴은 aligned_alloc(alignment, size)로 할당한 뒤, 같은 alignment와 size를 그대로 넘겨 해제하는 형태입니다.
참고: 여기서 핵심은
malloc/calloc/realloc로 할당한 메모리에는 이 함수를 쓰면 안 되고, 오직aligned_alloc로 할당한 메모리만 넘길 수 있다는 점이에요.
더 알아보기
aligned_alloc— 정렬된 메모리를 할당해요 (C11).free— 이전에 할당한 메모리를 해제해요.free_sized— 크기가 지정된, 이전에 할당한 메모리를 해제해요 (C23).malloc— 메모리를 할당해요.- cppreference의 free_aligned_sized 원문에서 표준 항목별 세부 규칙을 더 확인할 수 있어요.