`free_aligned_sized` — 크기와 정렬을 아는 상태에서 메모리를 해제하는 함수

free_aligned_sized — 크기와 정렬을 아는 상태에서 메모리를 해제하는 함수 (C23)

free_sized가 "크기를 아는 해제"였다면, free_aligned_sized는 그 위에 정렬 정보까지 함께 넘기는 함수예요. 특히 aligned_alloc으로 할당한 정렬 메모리를 해제할 때 쓰입니다.

출처: cppreference — free_aligned_sized

본문

free_aligned_sizedptr이 널 포인터이거나, 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_sizedfree_* 계열이 공유하는 스레드 안전성 규칙을 따릅니다. 인자를 통해 보이는 메모리 위치만 접근하는 것처럼 동작하고, 한 영역의 메모리를 해제하는 호출은 같은 영역이나 그 일부를 할당하는 이후의 어떤 할당 함수 호출과도 동기화됩니다.

매개변수

매개변수 설명
ptr 해제할 메모리를 가리키는 포인터
alignment 해제할 메모리의 정렬
size 해제할 메모리의 크기

반환값

없음.

예시

원문에는 아직 예시가 준비되지 않았어요("no example" 상태). 다만 사용 패턴은 aligned_alloc(alignment, size)로 할당한 뒤, 같은 alignmentsize를 그대로 넘겨 해제하는 형태입니다.

참고: 여기서 핵심은 malloc/calloc/realloc로 할당한 메모리에는 이 함수를 쓰면 안 되고, 오직 aligned_alloc로 할당한 메모리만 넘길 수 있다는 점이에요.

더 알아보기

  • aligned_alloc — 정렬된 메모리를 할당해요 (C11).
  • free — 이전에 할당한 메모리를 해제해요.
  • free_sized — 크기가 지정된, 이전에 할당한 메모리를 해제해요 (C23).
  • malloc — 메모리를 할당해요.
  • cppreference의 free_aligned_sized 원문에서 표준 항목별 세부 규칙을 더 확인할 수 있어요.