동적 메모리 할당 개요
동적 메모리 할당은 프로그램 실행 중에 메모리를 할당하고 해제하는 기능입니다.
이를 통해 프로그램은 실행 시간에 필요한 만큼의 메모리를 사용할 수 있어, 메모리 사용의 유연성과 효율성을 높일 수 있습니다.
new 연산자
new
연산자는 동적으로 메모리를 할당하고, 할당된 메모리의 주소를 반환합니다.
delete 연산자
delete
연산자는 동적으로 할당된 메모리를 해제합니다.
동적 배열 할당
new[]
를 사용하여 배열을 동적으로 할당할 수 있습니다.
2차원 배열의 동적 할당
2차원 배열을 동적으로 할당하는 방법은 다음과 같습니다.
메모리 누수 (Memory Leak)
메모리 누수는 할당된 메모리를 해제하지 않을 때 발생합니다.
이는 프로그램의 성능 저하와 crash를 유발할 수 있습니다.
예외 처리와 메모리 할당
메모리 할당 실패 시 예외 처리를 통해 안전하게 프로그램을 관리할 수 있습니다.
스마트 포인터 소개
C++ 11부터 도입된 스마트 포인터는 메모리 관리를 자동화하여 메모리 누수를 방지합니다.
RAII
RAII (Resource Acquisition Is Initialization)는 자원의 수명을 객체의 수명과 연결하여 자동으로 관리하는 C++ 프로그래밍 기법입니다.
연습 문제
- 동적으로 할당된 정수 배열에 사용자로부터 값을 입력받고, 이를 정렬한 후 출력하는 프로그램을 작성하세요.
- 학생 정보(이름, 나이, 성적)를 저장하는 클래스를 만들고, 여러 학생 객체를 동적으로 생성하여 관리하는 프로그램을 구현하세요.
- 2차원 동적 배열을 사용하여 행렬 곱셈을 수행하는 프로그램을 작성하세요.
참고자료
- C++ 공식 문서의 동적 메모리 관리 섹션 : Dynamic memory management
- "Effective C++" by Scott Meyers (항목 16 : new와 delete를 사용할 때는 형태를 반드시 맞추자)
- "C++ Primer" by Stanley B. Lippman, Josée Lajoie, and Barbara E. Moo (Chapter 12 : Dynamic Memory)
- C++ Core Guidelines의 자원 관리 관련 규칙 : R : Resource management
- "Modern C++ Programming with Test-Driven Development" by Jeff Langr (Chapter 7 : Memory Management)