IBM®
메인 컨텐츠로 가기
    Korea [국가변경]    이용약관
 
 
   
        제품    서비스 & 솔루션    고객지원 & 다운로드    회원 서비스    
메인 컨텐츠로 가기

한국 developerWorks  >  AIX와 UNIX | 리눅스  >

C/C++ 프로젝트에 사용할 메모리 관리자 직접 구현하기 (한글)

developerWorks
Go to the previous page15 페이지 중 2 페이지Go to the next page

문서 옵션

샘플 코드


제안 및 의견
피드백

튜토리얼 평가

이 컨텐츠를 개선하기 위한 도움을 주십시오.


자체 메모리 관리자가 필요한 이유

메모리 할당과 해제를 직접 통제하면 코드 성능을 향상하기도 쉬워진다. 어째서일까? 먼저, C/C++ 언어에서 메모리를 관리하는 방식을 떠올려 보자. C에서는 malloc , free , calloc , realloc 과 같은 표준 라이브러리 함수를, C++에서는 new , new [ ] , delete , delete [ ] 와 같은 표준 라이브러리 함수로 메모리 관리 핵심을 구성한다. 이런 사실을 염두에 두고 다음 몇 가지 사항을 고려해 보자.

malloc 이나 new 와 같은 함수는 범용 메모리 할당자다. 즉 응용 프로그램이 단일 스레드라도, 응용 프로그램이 링크한 malloc 함수는 다중 스레드를 처리하는 기능까지 포함한다. 이 같은 부가 기능이 응용 프로그램 성능을 떨어뜨린다.

차례로 mallocnew 는 운영체제 커널에 요청하여 메모리를 할당받고, freedelete 는 운영체제 커널에 요청하여 메모리를 반환한다. 즉 메모리를 할당하거나 해제할 때마다 운영체제는 사용자 영역 코드와 커널 영역 코드 사이를 전환해야 한다는 뜻이다. 따라서 malloc 이나 new 를 반복적으로 호출하는 프로그램은 문맥 전환 횟수가 늘어나는 탓에 그만큼 성능이 떨어진다.

프로그램을 짜다 보면 메모리를 할당 받은 후 필요하지 않을 경우에도 실수로 내버려 두는 경우가 빈번한데, C/C++에서는 자동 가비지 컬렉션을 지원하지 않는다. 그러다 보면 프로그램이 점유하는 메모리 양이 점점 증가하고, 아주 큰 프로그램에서는 성능이 급격히 떨어진다. 메모리가 점점 귀해지면서 시간이 걸리는 하드 디스크를 참조하는 횟수가 늘어나기 때문이다.




위로



Go to the previous page15 페이지 중 2 페이지Go to the next page
    IBM 소개 개인정보 보호정책 문의