C 언어 - 동적메모리의 개념

컴퓨터/C

728x90
반응형

정적 할당 동적 할당 (메모리 구조)

프로그래밍을 배우면 계속해서 나오는 것이 바로 메모리 구조에 대한 말을 많이 들어봤을 것입니다.

프로그래머가 소스코드를 작성하면 컴파일러는 기계어로 변경하며 필요한 메모리 크기를 계산하여 그 프로그램의 크기를 미리 결정하게 됩니다. 이렇게 프로그램이 만들어지는 순간 결정되어 메모리를 할당받는 녀석들을 정적 메모리를 할당받는다고 합니다. 그리고 프로그램이 실행되면서 필요한 순간에 메모리를 할당받는 녀석들을 동적 메모리 할당이라고 합니다.  그리고 메모리 구조상 이 영역들을 구분하고 있습니다.

 

  • 정적 메모리 할당의 영역
    • 스택 영역 - 지역변수 / 매개변수
    • 데이터 영역 - 전역 변수 / 정적 변수
    • 코드 영역 - 프로그램 명령 코드들
  • 동정 메모리 할당의 영역
    • 힙 영역 - 동적으로 할당된 메모리

다시 정리하자면 

  • 정적 메모리는 크기 프로그램이 컴파일되는 시점에 크기가 결정된다.
  • 동적 메모리는 프로그램이 실행되는 도중에 사용자가 결정하게 된다.

왜 동적 메모리 할당이 필요할까?

만약 동적 메모리가 없이 정적 메모리의 할당으로만 프로그램을 만들면 상당히 큰 문제가 생깁니다. 만약 프로그래머가 100개의 정보를 저장할 수 정적 메모리 할당(배열)을 사용해서 프로그램을 만들었다면 100개를 다 쓰지 않아도 100개 크기의 메모리를 계속해서 소모하고 있습니다. 

이렇게 프로그램이 계속해서 정적 메모리 할당으로만 만들어진다면 프로그램이 복잡해지고 커질수록 엄청나게 거대한 메모리 공간을 잡아먹는 프로그램이 될 것입니다.

이런 상황은 엄청나게 비 효율적입니다. 이런 비효율적인 프로그램을 개선하기 위해 프로그램이 실행되면서 사용자가 원하는 만큼만 메모리를 사용하기 위한 방법이 바로 동적 메모리 할당입니다.

이 동적 메모리 할당을 사용함으로 아주 효율적이고 콤팩트 한 프로그램을 만드는 도움을 줄 것입니다.

 

동적 메모리 할당은 시작과 종료가 필요하다.

정적 메모리의 할당 같은 경우에는 컴파일러에서 미리 준비하고 알아서 처리를 합니다. 하지만 동적 메모리 할당은 사용자가 원하는 시점에 메모리를 할당받고 원하는 시점에 할당을 해제할 수 있는 자유로운 방법입니다. 이런 자유에는 유의해야 될 부분이 많이 생깁니다. C언어에서는 이런 동적 메모리의 할당과 해제를 프로그래가 직접 명령해 주어야 합니다.

 

메모리 누수현상의 주의 

메모리 누수현상이란 프로그래머가 자유롭게 동적으로 메모리를 할당한 후 다 사용된 메모리의 할당을 해제하지 않으면 그 할당받은 동적 메모리를 계속해서 가지고 있습니다. 이미 프로그램에서는 다 사용하고 난 후에도 말입니다.(지역변수처럼 자동 소멸이 되지 않는다는 말입니다.) 이렇게 불필요한 메모리들이 생기는 현상을 메모리 누수현상이라고 말합니다. 효율적이고 자유로운 프로그래밍을 하기 위해 생긴 동적 메모리 할당을 잘못해서 사용하면 오히려 메모리의 누수가 생길 수도 있기 때문에 항상 동적 메모리 할당을 사용하려면 주의해야 됩니다.

 

728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :