 |
|
자체 메모리 관리자가 필요한 이유
메모리 할당과 해제를 직접 통제하면 코드 성능을 향상하기도 쉬워진다. 어째서일까? 먼저,
C/C++ 언어에서 메모리를 관리하는 방식을 떠올려 보자. C에서는
malloc
,
free
,
calloc
,
realloc
과 같은 표준 라이브러리 함수를, C++에서는
new
,
new [ ]
,
delete
,
delete [ ]
와 같은 표준 라이브러리 함수로 메모리 관리 핵심을 구성한다. 이런 사실을 염두에 두고 다음
몇 가지 사항을 고려해 보자.
malloc
이나
new
와 같은 함수는 범용 메모리 할당자다. 즉 응용 프로그램이 단일 스레드라도, 응용 프로그램이
링크한
malloc
함수는 다중 스레드를 처리하는 기능까지 포함한다. 이 같은 부가 기능이 응용 프로그램 성능을
떨어뜨린다.
차례로
malloc
과
new
는 운영체제 커널에 요청하여 메모리를 할당받고,
free
와
delete
는 운영체제 커널에 요청하여 메모리를 반환한다. 즉 메모리를 할당하거나 해제할 때마다
운영체제는 사용자 영역 코드와 커널 영역 코드 사이를 전환해야 한다는 뜻이다. 따라서
malloc
이나
new
를 반복적으로 호출하는 프로그램은 문맥 전환 횟수가 늘어나는 탓에 그만큼 성능이 떨어진다.
프로그램을 짜다 보면 메모리를 할당 받은 후 필요하지 않을 경우에도 실수로 내버려 두는 경우가
빈번한데, C/C++에서는 자동 가비지 컬렉션을 지원하지 않는다. 그러다 보면 프로그램이
점유하는 메모리 양이 점점 증가하고, 아주 큰 프로그램에서는 성능이 급격히 떨어진다. 메모리가
점점 귀해지면서 시간이 걸리는 하드 디스크를 참조하는 횟수가 늘어나기 때문이다.
|