serversim
학습시뮬레이터템플릿가격
…
…
메뉴 열기
학습↗시뮬레이터↗템플릿↗가격↗
내 Documents문서
전체 목차/3장/3.720 / 40

3.7 · 메모리와 포인터

대표적인 메모리 버그는 왜 생길까?

주소는 남아 있는데 그곳을 더 이상 사용하면 안 되는 순간은 언제일까요?

포인터 값이 존재한다는 사실과 그 주소를 안전하게 사용할 권리가 있다는 사실은 다릅니다.

먼저 생활 비유

반납한 사물함 열쇠

열쇠 번호를 기억해도 사물함을 반납했다면 다음 사용자의 물건을 건드릴 수 있습니다.

컴퓨터 예제로 바꾸기

해제 후 사용

free(user);
print(user->name); // 위험

user가 가진 주소 숫자는 남아 있지만 그 블록은 이미 다른 객체에 재사용될 수 있습니다.

직접 움직여 보기1 / 5

지금 일어나는 변화

할당

포인터가 유효한 블록을 가리킵니다.

주소와 저장 공간주소가 붙은 메모리 공간할당단계 1정상 사용단계 2해제단계 3주소는 남음단계 4잘못된 접근단계 5낡은 주소현재: 할당

이 그림에서 기억할 한 문장

메모리 안전은 주소의 범위뿐 아니라 객체의 수명과 소유권을 함께 지키는 문제입니다.

현재 상태

이동하는 것
낡은 주소
현재 위치
할당
다음 위치
정상 사용

30초 확인 문제

free(p) 직후 p의 숫자 값은 보통?

처음 보는 용어 두 개

댕글링 포인터
수명이 끝난 메모리를 계속 가리키는 포인터
메모리 누수
더 이상 필요 없지만 해제할 방법을 잃은 메모리

이 절을 다 읽었다면

메모리 안전은 주소의 범위뿐 아니라 객체의 수명과 소유권을 함께 지키는 문제입니다.

← 이전 절

3.6 고성능 서버는 왜 메모리 풀을 사용할까?

다음 절 →

3.8 SSD는 왜 RAM처럼 사용할 수 없을까?