동적할당: 두 판 사이의 차이
(컴퓨터 과학 용어 정리 - 동적할당 추가) |
편집 요약 없음 |
||
1번째 줄: | 1번째 줄: | ||
=== [C] 동적할당 === | === [C] 동적할당 === | ||
==== 동적할당이란? ==== | |||
프로그램 실행 중에 '''동적으로 메모리를 할당'''하는 것을 의미하며, '''힙(Heap) 영역'''에 메모리를 확보한다. | |||
==== 특징 ==== | |||
< | #include <stdlib.h> 헤더 파일이 필요하다. | ||
동적 메모리 관리를 위한 주요 함수: | |||
==== 메모리 관련 함수 ==== | |||
'''malloc''': 메모리를 원하는 크기만큼 할당 | |||
void* malloc(size_t size) | |||
예: malloc(sizeof(int) * 4) → int형 변수 4개 크기만큼 할당 | |||
'''calloc''': 메모리 할당과 동시에 0으로 초기화 | |||
void* calloc(size_t nelem, size_t elsize) | |||
첫 번째 인자: 요소 개수, 두 번째 인자: 요소 크기 | |||
'''realloc''': 기존 메모리 크기를 변경 (추가/축소) | |||
void* realloc(void* ptr, size_t size) | |||
원래 메모리의 내용을 유지하면서 크기를 변경함 | |||
'''free''': 동적할당된 메모리 해제 | |||
void free(void* ptr) | |||
==== 중요: 메모리 해제 ==== | |||
동적으로 할당된 메모리는 사용이 끝나면 반드시 '''free()'''를 사용해 해제해야 한다. 그렇지 않으면 '''메모리 누수(memory leak)'''가 발생할 수 있다. | |||
==== 예제 코드 ==== | |||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
int main(void) { | int main(void) { | ||
int arr[4] = { 4, 3, 2, 1 }; | |||
int* pArr; | |||
// 동적할당: int형 4개만큼 메모리 할당 | |||
pArr = (int*)malloc(sizeof(int) * 4); | |||
if(pArr == NULL) { | |||
printf("malloc error\n"); | |||
exit(1); | |||
} | } | ||
for(int i = 0; i < 4; ++i) { | |||
pArr[i] = arr[i]; | |||
} | |||
for(int i = 0; i < 4; ++i) { | |||
printf("%d\n", pArr[i]); | |||
} | |||
// 메모리 해제 | |||
free(pArr); | |||
return 0; | |||
} | |||
==== 코드 설명 ==== | |||
(int*): malloc은 void*를 반환하므로 형변환 필요 | |||
sizeof(int): int형의 바이트 크기 (일반적으로 4바이트) | |||
* 4: 배열 4개 요소의 메모리 확보 | |||
free(pArr): 사용 후 반드시 메모리 해제 |
2025년 5월 6일 (화) 07:06 판
[C] 동적할당
동적할당이란?
프로그램 실행 중에 동적으로 메모리를 할당하는 것을 의미하며, 힙(Heap) 영역에 메모리를 확보한다.
특징
- include <stdlib.h> 헤더 파일이 필요하다.
동적 메모리 관리를 위한 주요 함수:
메모리 관련 함수
malloc: 메모리를 원하는 크기만큼 할당
void* malloc(size_t size)
예: malloc(sizeof(int) * 4) → int형 변수 4개 크기만큼 할당
calloc: 메모리 할당과 동시에 0으로 초기화
void* calloc(size_t nelem, size_t elsize)
첫 번째 인자: 요소 개수, 두 번째 인자: 요소 크기
realloc: 기존 메모리 크기를 변경 (추가/축소)
void* realloc(void* ptr, size_t size)
원래 메모리의 내용을 유지하면서 크기를 변경함
free: 동적할당된 메모리 해제
void free(void* ptr)
중요: 메모리 해제
동적으로 할당된 메모리는 사용이 끝나면 반드시 free()를 사용해 해제해야 한다. 그렇지 않으면 메모리 누수(memory leak)가 발생할 수 있다.
예제 코드
- include <stdio.h>
- include <stdlib.h>
int main(void) { int arr[4] = { 4, 3, 2, 1 }; int* pArr;
// 동적할당: int형 4개만큼 메모리 할당 pArr = (int*)malloc(sizeof(int) * 4);
if(pArr == NULL) {
printf("malloc error\n"); exit(1);
}
for(int i = 0; i < 4; ++i) {
pArr[i] = arr[i];
}
for(int i = 0; i < 4; ++i) {
printf("%d\n", pArr[i]);
}
// 메모리 해제 free(pArr);
return 0;
}
코드 설명
(int*): malloc은 void*를 반환하므로 형변환 필요
sizeof(int): int형의 바이트 크기 (일반적으로 4바이트)
- 4: 배열 4개 요소의 메모리 확보
free(pArr): 사용 후 반드시 메모리 해제