c 프로그래밍을 좀 해봤다 하는 사람들은 malloc이 메모리 공간을 할당해주는 함수이고, free는 메모리 공간을 해제하는 함수라는 것을 알고 있을 것이다.

여기서 좀 더 나아가서 이로 인해 생기는 문제점인 dangling pointer를 알고 있는 사람도 있을 것이다.

하지만 문득 궁금할 것이다.

왜 free 함수를 써서 메모리 공간을 해제했는데 포인터 변수는 아직도 메모리 공간을 가리키고 있지?

이는 malloc과 free가 단순히 메모리 공간을 생성하고 없애는 개념이 아니기 때문이다.

malloc과 free의 매커니즘

프로그램에 메모리 공간을 할당할 때, 시스템은 물리적인 메모리를 프로그램에 직접 할당하지 않고 가상메모리라는 메모리 관리 기법을 이용하여 메모리 공간을 할당하게 된다.

가상메모리란 물리적인 메모리보다 큰 프로세스를 실행시키기 위해 물리 메모리를 추상화하는 기법으로, 메모리 관리의 핵심 중 하나이다.

중요한 개념이지만 여기서는 이런 개념이 있다 정도로만 짚고 넘어가겠다.

아무튼 malloc 함수를 호출하면 시스템에서는 가상메모리를 요청하여 공간을 할당하고, free를 호출하면 이 할당한 공간을 해제하게 된다. 이에 대한 과정은 다음과 같다.