반응형

c언어 메모리 (Memory) - 재할당 (realloc)

 

 

I realloc 함수

  • 정의
    • 새로운 배열을 할당 후 이전 배열을 새로운 배열의 시작점에 복사한다.
    • 이전 배열은 할당 해제 (deallocate)
    • 포인터가 변하므로, 배열은 업데이트가 필요하게 된다.
  • 재할당이 용이한 경우
    • 이전 배열이 힙(heap) 메모리의 끝에 있는 경우, realloc은 이를 움직이지 않고도 메모리를 늘릴 수 있다.
    • 배열이 큰 경우, realloc은 더 큰 메모리 비용을 피하기 위해 별도의 가상 메모리 구획(segment)를 사용한다.
  • 활용
    • 비어있는 배열의 공간-비효율성(space-inefficient)을 방지하기 위해 작게 시작 (ex. 24 bytes)
    • 이후 큰 배열의 시간-비효율성(time-inefficient)을 방지하기 위해 크기를 곱한다. (ex. 1.5 배)

 

char 배열 재할당

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* Reallocate: allocate a new char array */
#include <stdio.h>
#include <stdlib.h>
 
int main() {
    char *array = malloc(8);
    int capacity = 8;
    printf("capacity * (sizeof(char)): %d * %d = %d\n"
        capacity, sizeof(char), capacity * (sizeof(char)));
    printf("capacity: %d -> ", capacity);
    capacity = capacity * 3 / 2;
    printf("new capacity: %d\n", capacity);
    array = realloc(array, capacity);
    printf("capacity * (sizeof(char)): %d * %d = %d\n"
        capacity, sizeof(char), capacity * (sizeof(char)));
}
 
cs

 

 

 

반응형