free_sized
From cppreference.net
|
헤더 파일에 정의됨
<stdlib.h>
|
||
|
void
free_sized
(
void
*
ptr,
size_t
size
)
;
|
(C23 이후) | |
malloc() , calloc() , 또는 realloc() (단 aligned_alloc() 은 제외)으로 이전에 할당된 공간을 해제합니다.
|
이 섹션은 불완전합니다
이유: `free_*` 계열 함수 간 설명 공유 필요 |
free_sized
는 스레드 안전합니다: 이 함수는 인자를 통해 접근 가능한 메모리 위치만 접근하는 것처럼 동작하며, 정적 저장소는 접근하지 않습니다.
free_sized
호출로 메모리 영역을 할당 해제하는 것은 동일한 메모리 영역 전체 또는 일부를 할당하는 이후의 모든 할당 함수 호출과
동기화됩니다(synchronizes-with)
. 이 동기화는 할당 해제 함수에 의한 메모리 접근 이후에, 그리고 할당 함수에 의한 메모리 접근 이전에 발생합니다. 각 특정 메모리 영역에 대해 동작하는 모든 할당 및 할당 해제 함수에는 단일한 전체 순서가 존재합니다.
목차 |
매개변수
| ptr | - | 할당 해제할 메모리에 대한 포인터 |
| size | - | 이전에 할당 함수에 전달된 메모리 크기 |
반환값
(없음)
참고 사항
| 이 섹션은 불완전합니다 |
가능한 구현
예제
이 코드 실행
#include <stddef.h> #include <stdio.h> #include <stdlib.h> typedef struct { size_t size; // 현재 원소 개수 size_t capacity; // 예약된 원소 개수 void** data; } PtrVector; PtrVector vector_create(size_t initial_capacity) { PtrVector ret = { .capacity = initial_capacity, .data = (void**) malloc(initial_capacity * sizeof(void*)) }; return ret; } void vector_delete(PtrVector* self) { free_sized(self->data, self->capacity * sizeof(void*)); } void vector_push_back(PtrVector* self, void* value) { if (self->size == self->capacity) { self->capacity *= 2; self->data = (void**) realloc(self->data, self->capacity * sizeof(void*)); } self->data[self->size++] = value; } int main() { int data = 42; float pi = 3.141592f; PtrVector v = vector_create(8); vector_push_back(&v, &data); vector_push_back(&v, &pi); printf("data[0] = %i\n", *(int*)v.data[0]); printf("data[1] = %f\n", *(float*)v.data[1]); vector_delete(&v); }
출력:
data[0] = 42 data[1] = 3.141592
참조문헌
- C23 표준 (ISO/IEC 9899:2024):
-
- 7.24.3.4 free_sized 함수 (p: 365-366)
참고 항목
|
이전에 할당된 메모리를 해제합니다
(함수) |
|
|
(C23)
|
이전에 할당된 크기 및 정렬된 메모리를 해제합니다
(함수) |
|
메모리를 할당합니다
(함수) |