기본 CS지식

메모리 관리란

함형우 2023. 10. 23. 17:11
728x90

메모리 관리는 소프트웨어, 응용 프로그램이 컴퓨터 메모리에 접근하는 방식을 제어, 조정하는 역할입니다. 이는 소프트웨어 엔지니어링에서 중요한 주제로써 항상 거론되는 이야기입니다. 거의 모든 개발에서 강조되는 사항이므로 반드시 숙지하고 이해해야합니다.

 

소프트웨어가 컴퓨터를 대상으로 OS에서 실행될 경우, 다음 사항들을 위해서 RAM에 접근합니다.

  • 실행해야 하는 바이트코드를 로드
  • 실행되는 프로그램에서 사용되는 데이터 값, 데이터 구조를 저장
  • 프로그램 실행에 필요한 런타임 시스템을 로드

소프트웨어 프로그램이 메모리를 사용할 경우, 바이트 코드를 로드하는 공간 외에 사용되는 메모리 영역이 두가지 있습니다. 스택 및 힙 메모리 입니다.

 

스택 / 힙

스택, 힙은 메모리 구조에서 제일 먼저 맞이하는 기초 개념들 중 한가지입니다. 스택은 정적 메모리 할당에 사용되며 LIFO (후입 선출) 스택입니다. 

 

이러한 특성때문에 스택에서 데이터를 저장/검색하는 프로세스는 매우 빠릅니다. 데이터를 맨 위에 블럭에서 저장하고 검색하기만 하면 되기 때문에 검색하는 작업을 실행할 이유가 없습니다. 하지만 이것은 스택에 저장할 수 있는 데이터가 유한하고, 정적이어야 한다는 것을 뜻합니다.

 

이곳에는 스택 프레임으로 함수의 실행 데이터가 저장됩니다. 각 프레임은 해당 함수에 필요한 데이터가 저장되는 공간입니다. 함수가 새 변수를 선언하면 그 때마다 변수는 스택의 최상단 블록부터 푸시 됩니다. 그 다음 함수가 종료될 때마다 최상단 블록이 삭제됩니다. 따라서 해당 함수에서 스택에 푸시된 모든 변수들이 지워집니다.

 

이러한 과정이 저장된 데이터의 특성으로 인해 컴파일 시점에서 시간이 결정됩니다.

 

  • 멀티 스레드 애프리케이션은 스레드마다 스택을 가질 수 있음
  • 스택의 메모리 관리는 단순, 명확하고 OS에서 실행됨
  • 스택의 크기는 힙에 비해서 제한되어 있기 때문에 스택 오버플로우 오류를 발생시킴

 

힙은 동적 메모리 할당에 사용됩니다. 스택과 다르게 프로그램이 포인터를 사용하여 힙의 데이터를 찾습니다.

 


 

스택보다는 느리지만 더 많은 데이터를 저장할 수 있습니다. 또한 동적 크기의 데이터를 저장할 수 있습니다. 이러한 특성때문에 관리하기 까다롭고, 대부분의 메모리 관리 문제가 발생하며 언어의 자동 메모리 관리 솔루션이 작동합니다.

 

애플리케이션이 할당된 힙보다 더 많은 메모리를 사용하려고 시도하면 메모리 부족 오류가 발생합니다. 그러나 힙 자체에 저장되는 메모리의 크기에는 제한이 없지만, 애플리케이션에 할당된 메모리만큼의 상한선은 존재합니다.

 

하드 디스크와는 다르게 RAM은 무한하지 않습니다. 늘리고싶은 만큼 늘릴 수 없기때문에 프로그램이 계속 메모리를 소비하며, 종료되지 않으면 결국 메모리가 부족해져 자체적으로 오류가 발생할 수 밖에 없다. 다른 프로그램과 프로세스가 메모리 부족 상태에 처하지 않도록 하는 것이 이 메모리 관리에 주된 목적 중 하나이다.

 

이러한 부분을 개발자에게 모두 맡기지 않고, 대부분 프로그래밍 언어내에서 자동으로 메모리 관리 방법들을 제공하고 있습니다. 대표적으로 자바에서는 가비지 컬렉션이 상시로 가동되고 있습니다.

728x90