반응형
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 |
반응형
'C 언어 > C언어 기초' 카테고리의 다른 글
[C언어 #56] 리스트 (list) 확장 (realloc) - 동적 배열 ArrayList 만들기 (0) | 2020.08.01 |
---|---|
[C언어 #55] 리스트 (list) - 동적배열 (배열 길이 활용) (0) | 2020.07.30 |
[C언어 #53] 이진 탐색 (Binary Search) - 특정 문자 포함 여부 찾기 (0) | 2020.07.20 |
[C언어 #52] 순차 탐색 (Linear Search) - 특정 문자 포함 여부 찾기 (0) | 2020.07.20 |
[C언어 #51] 파일 입출력 (IO) - 콤마 쉼표 구분해서 문자열 읽기 (0) | 2020.07.17 |