동적 메모리 할당
C언어에서 동적 배열은 프로그램 실행 중에 배열의 크기를 결정하고 메모리를 할당할 수 있게 해주는 매우 유용한 기능이다. 동적 배열은 malloc, calloc, 또는 realloc 함수를 사용하여 힙(Heap) 영역에 메모리를 할당함으로써 생성된다. 이러한 방식은 정적 배열과 달리, 실행 시간에 배열의 크기를 유연하게 조절할 수 있게 해준다.
⭐1. 필요성
- 유연성: 프로그램 실행 중에 배열의 크기를 결정할 수 있으므로, 사용자 입력이나 다른 실행 시간 데이터에 기반한 메모리 할당이 가능하다.
- 메모리 효율성: 필요한 만큼의 메모리만 할당하여 사용하므로, 메모리 낭비를 줄일 수 있다.
⭐2. 메모리적인 관리의 장점 및 단점
2.1. 장점
- 메모리 최적화: 정적 배열과 달리, 필요한 만큼의 메모리만 사용하기 때문에 전체 프로그램의 메모리 효율성이 향상된다.
- 확장성: 필요에 따라 realloc 함수를 사용하여 배열의 크기를 증가시킬 수 있다.
2.2. 단점
- 메모리 관리 부담: 동적 할당된 메모리는 개발자가 직접 해제해주어야 합니다(free 함수 사용). 이를 소홀히 하면 메모리 누수가 발생할 수 있다.
- Fragmentation 문제: 잦은 할당과 해제는 메모리 단편화를 초래할 수 있으며, 이는 프로그램의 성능 저하로 이어질 수 있다.
⭐3. 메모리의 구분
- 스택(Stack): 함수 호출 시 생성되는 지역 변수가 저장되는 영역입니다. 함수가 종료되면 자동으로 메모리가 해제된다.
- 힙(Heap): 동적 메모리 할당에 사용되는 영역입니다. 프로그래머가 직접 할당하고 해제해야 한다.
⭐4. Code
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int n;
printf("Enter the number of elements: ");
scanf("%d", &n);
// 동적 배열 생성
arr = (int*)malloc(n * sizeof(int));
if (arr == NULL) {
printf("Memory allocation failed\n");
return 1;
}
// 배열 사용
for (int i = 0; i < n; i++) {
arr[i] = i;
}
// 배열에 저장된 값 출력
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 메모리 해제
free(arr);
return 0;
}
이 코드는 유저로부터 입력 받은 숫자 만큼의 배열 크기를 동적으로 할당하고, 각 요소에 값을 할당한 후 출력하고 마지막으로 할당된 메모리를 해제한다. 동적 배열을 사용함으로써, 프로그램의 유연성과 메모리 사용의 효율성을 높일 수 있다. 그러나 동적 메모리 관리를 잘못하면 메모리 누수와 같은 문제가 발생할 수 있으므로 주의가 필요하다.
동적할당을 크게 요구하는 프로젝트에 참가한 적이 없지만, 메모리 구조 공부를 위해 알 필요는 있다.
728x90
반응형
'Language > C언어' 카테고리의 다른 글
[C/C++ Tip] 16. Extern 중복 문제 해결 (Include Guard) (0) | 2024.11.02 |
---|---|
[C/C++ Tip] 15. extern 기본 (0) | 2024.11.02 |
[C/C++ Tip] 13. MCU 제어를 위한 비트 연산 (0) | 2024.10.29 |
[C/C++ Tip] 12. 포인터가 헷갈릴 수 밖에 없는 이유: 별(*)의 종류와 정체 (1) | 2024.09.21 |
[C/C++ Tip] 11. C언어 포인터 기본 사용법 (1) | 2024.09.19 |