Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- mathematics for computer science
- mit
- HJB방정식
- 로봇공학
- 자료구조
- 정렬
- 텔레스코픽로봇
- baekjoon problem solving
- 큐
- std::sort
- baekjoon
- 전국 대학생 수학 경시대회
- LeggedRobot
- 다리로봇
- 대수경
- 수학
- 로보틱스
- lqr
- 집합과 맵
- 구현
- 실버 4
- C++
- 최적제어
- 문자열
- BOJ
- 6.042j
- 논문리뷰
- 백준
- MIT opencourse
- 실버 5
Archives
- Today
- Total
서두르지 말고 쉬지 말자
C언어와 동적할당 본문
동적할당이란?
동적할당(Dynamic Memory Allocation)은 프로그램이 실행되는 런타임(실행 중)에 메모리 공간을 필요에 따라 할당하고 해제하는 기법이다. 이는 프로그램이 시작될 때 미리 메모리 크기를 정해두는 정적할당(static allocation)과 대비되는 개념이다
동적할당이 필요한 이유
- 프로그램 실행 전에 필요한 메모리 크기를 예측할 수 없는 경우가 많음
- 입력 데이터의 크기, 사용자 요구 등 런타임에 결정되는 변수 대응
- 메모리를 효율적으로 사용하여 낭비를 줄임 (필요할 때만 할당, 사용 후 해제)
동적할당의 동작 방식
- 할당: 런타임에 메모리(주로 힙 영역)를 요청하여 확보
- 사용: 확보한 메모리 공간을 포인터로 접근하여 사용
- 해제: 사용이 끝난 메모리 공간을 명시적으로 반환(해제)해야 함
사용되는 주요 함수(stdlib.h에 있음)
1. malloc
void* malloc(size_t size);
기능 : 지정된 크기(size bytes)의 메모리 블록 할당(초기화 되지 않은 채로 할당)
2. calloc
void* calloc(size_t num, size_t size);
기능: num개 요소 각각 size bytes 크기의 메모리 할당 후 0으로 초기화
3.realloc
void* realloc(void* ptr, size_t new_size);
기능: 기존 메모리 블록 크기 조정 (확장/축소)
4. free
void free(void* ptr);
기능: 할당된 메모리 해제
중요 규칙
1. 할당된 주소만 해제: 포인터 연산으로 변형된 주소(arr+1 등)는 해제 불가
2. 이중 해제 금지: 이미 해제된 메모리 재해제 시 오류 발생
메모리 누수
메모리 누수(Memory leak)는 프로그램이 동적으로 할당한 메모리를 사용한 후 해제하지 않아, 시스템 메모리가 점차 고갈되는 현상이다. 이는 더 이상 사용되지 않는 메모리가 힙(Heap) 영역에 남아 있어 발생하며, 장기적으로는 프로그램 성능 저하나 Out of Memory 오류를 유발한다.
주요 원인
- 명시적 해제 누락: malloc, calloc으로 할당한 메모리를 free로 해제하지 않은 경우
- 포인터 주소 손실: 할당된 메모리의 시작 주소를 잃어버린 경우 (예: realloc 사용 시)
- 순환 참조: 객체가 서로를 참조하여 가비지 컬렉션을 방해하는 경우
메모리 누수 방지 전략
- 할당-해제 쌍 맞추기: malloc ↔ free를 반드시 대응시킴
- 임시 포인터 활용
반응형
'코딩 공부 > C언어' 카테고리의 다른 글
| 구조체, 공용체, 열거체 (0) | 2025.04.30 |
|---|
