반응형

동적 메모리 할당은 동적이란 말처럼

메모리를 가변적으로 할당하고 해제한다.


바로 C언어의 malloc이란 함수처럼 말이다.

calloc도 있지만 사람들은 주로 malloc을 사용한다.

malloc은 사용 여부에 따라서는

정말 마술사 같은 역할을 할 수도 있다.


한정된 메모리 공간 내에서

특정 기능을 위해 메모리를 할당했다

기능을 다 쓰고 나면 메모리를

다시 시스템에 반납하기 때문에

메모리를 효율적으로 사용할 수가 있기 때문이다.

하지만 무조건 malloc을 신봉하면 될까?
정답은 No다.


요즘 PC의 성능이 워낙 뛰어나기 때문에

별로 못 느끼겠지만

malloc을 통해 메모리를 할당하고

free를 통해 메모리를 해제하는 과정은

시간을 잡아먹는다.


큰 용량의 메모리 공간을 빈번하게

malloc과 free를 통해 할당/해제하면
embedded 환경에서는

분명히 적지 않은 시간을 잡아먹는다.

따라서 메모리 용량에 민감하지 않은 환경이라면

배열을 쓰는 게 나은 경우가 많다.

 

첫 번째 이유는
배열은 프로그램이 실행될 때

단 한 번만 메모리 공간을 잡기 때문에
   추가적인 시간이 들지 않는다.

 

두 번째 이유는
배열은 메모리 해제에 대해

신경을 쓸 필요가 없기 때문에
   메모리 누수(memory leak)에 대해

걱정할 필요가 없다.

다중 프로세스 환경에서는

다른 프로세스가 메모리를 많이 잡아먹는 바람에
자신의 프로세스가 malloc을 통해

메모리를 할당하지 못하는 경우도 발생한다.


애초에 미리 배열로 메모리를 정적으로 잡아 놓았다면

그런 경우가 드물 것이다.

물론 미리 메모리를 먹고 있는 것이

다소 얌체처럼 보일 수도 있겠지만

이론상으로는 malloc도 배열이 가지는

최댓값(max) 만큼은 할당할 수 있어야 한다.

malloc을 쓰든 배열을 쓰든 개발자의 마음 이겠지만
자신이 처한 시스템 환경에 맞게

적절히 사용하는 것이 바람직하다.


그리고 잦은 메모리 할당과 해제는
메모리 단편화(fragment) 현상을

일으키는 시스템도 있기 때문에

한 번쯤 생각해 볼 문제다.

반응형