C 프로그램에서 자주 발생하는 메모리 버그와 9장 전체 요약
이번 포스트에서는 C 프로그램을 작성할 때 자주 만나는 메모리 관련 버그들을 살펴보고, 마지막으로 9장 전체 핵심 내용을 정리해보겠습니다.
C에서 흔히 발생하는 메모리 버그
- 메모리 누수 (Memory Leak)
malloc()
으로 할당한 메모리를free()
하지 않아 점차 메모리가 소모되는 문제
- 댕글링 포인터 (Dangling Pointer)
- 이미 해제된 메모리 영역을 여전히 접근하려고 시도하는 위험한 상황
- 잘못된 메모리 참조 (Invalid Memory Reference)
- 자신에게 허용되지 않은 메모리 공간을 읽거나 쓰는 것 (예: 경계를 초과한 접근)
- 중복 해제 (Double Free)
- 이미 해제된 메모리를 다시
free()
하는 오류
- 이미 해제된 메모리를 다시
- 버퍼 오버플로우 (Buffer Overflow)
- 배열 범위를 벗어나 다른 메모리 영역을 침범하는 문제 (보안 취약점 유발)
메모리 버그를 줄이는 방법
free()
후에는 포인터를 NULL로 설정하기- Valgrind 같은 메모리 디버깅 도구 적극 활용하기
- 배열/포인터 연산 시 항상 경계 확인하기
- 할당과 해제 책임을 명확히 코드에 명시하기
9장 전체 요약
마지막으로, 9장에서 배운 핵심 내용을 간단하게 정리해봅니다.
- 가상 메모리(Virtual Memory)
- 프로세스마다 독립된 메모리 공간 제공
- 메모리 계층 구조
- 캐시, 메모리, 디스크로 이어지는 계층적 접근
- 메모리 할당과 관리
- 동적 할당(heap), 스택, 정적 메모리 구분
- 동적 메모리 할당기 설계
- Placement 정책, Splitting, Coalescing, Free List 구조 이해
- 가비지 컬렉션
- 메모리 수거 자동화 기법과 trade-off
- 메모리 관련 버그
- 메모리 누수, 댕글링 포인터, 경계 초과 등 주의사항
마치면서
이번 편을 끝으로 9장 전체 내용을 모두 마무리했는데요. 메모리 시스템은 단순히 프로그래밍 테크닉을 넘어, 소프트웨어의 성능과 안정성을 좌우하는 핵심 기반입니다.
앞으로 C 프로그래밍, 시스템 프로그래밍, 성능 최적화 등을 공부할 때, 이 9장에서 다진 기초가 큰 힘이 되어줄 것이라 믿어 의심치 않습니다. 끝까지 읽어주셔서 정말 감사합니다!
'크래프톤 정글 > 컴퓨터구조(CSAPP)' 카테고리의 다른 글
[CSAPP 6장 완전 정복] 6.3 메모리 계층구조 제대로 이해하기 (0) | 2025.04.29 |
---|---|
[CSAPP 6장 완전 정복] 6.1~6.2 저장장치 기술과 지역성(Locality) 개념 이해하기 (0) | 2025.04.28 |
[CSAPP 9장 완전 정복] 9.10 가비지 컬렉션(Garbage Collection) 이해하기 (0) | 2025.04.26 |
[CSAPP 9장 완전 정복] 9.9(Part 12) 최종 정리: 간단한 동적 메모리 할당기 설계 방향 (0) | 2025.04.26 |
[CSAPP 9장 완전 정복] 9.9(Part 11) 메모리 활용률(Peak Utilization) 측정과 평가 지표 (0) | 2025.04.26 |