[PART5] 운영체제/시스템/보안 - TERMS 05
2025. 6. 30. 02:42

[ TERMS 05 ]  메모리

메모리의 종류를 설명하는 이미지(출처 : https://www.youtube.com/watch?v=TE6rQJnlrAM)

1. 메모리(Memory)의 정의

 메모리는 RAM(Random Access Memory)으로써 순서에 상관없이 임의로 데이터들에 접근하는 장치를 의미한다. 컴퓨터가 작업을 처리할 때 CPU는 계산을 담당하고 HDD와 같은 보조기억장치는 정보를 담당한다. 그런데 보조기억장치에서 바로 계산하기에는 CPU에 비해 보조기억장치가 상대적으로 너무 느리기 때문에 보다 빠른 RAM을 활용하여 정보를 처리한다.

 

2. 메모리는 어디서 접하게 될까?

 프로그래밍 언어는 크게 2가지로 분리할 수 있다. C/C++과 같이 개발자가 메모리를 직접 관리하는 Managed언어, 자바와 같이 가비지 컬렉터가 메모리를 관리하는 Unmanaged 언어가 있다.

 프로그래밍에서 메모리는 중요하다. 메모리 관리에 따라 프로그램들이 느려지거나 무한 대기 상태에 빠지는 경우가 있다. 변수에 따라 다른 메모리 영역에 적재가 된다. 따라서 메모리를 알고 프로그래밍을 하면 메모리 관리를 효과적으로 할 수 있다.

 

3. 메모리 영역 알아보기

 코드 혹은 프로그램이 실행되면 가장 먼저 작성한 코드는 컴퓨터가 이해할 수 있는 언어로 변환되어야 한다. 이 과정을 컴파일이라고 하며 이 과정에서부터 네 가지 메모리 영역에 변수들이 종류별로 다르게 적재된다.

메모리 구조를 설명하는 이미지(출처 https://medium.com/@dhleee0123/stack-heap-memory-86daeb1b48f7)

>  코드(Code) 영역

 프로그램이 컴파일되면 모든 코드는 코드 영역에 적재된다. 그리고 코드 영역의 코드들을 CPU가 하나씩 가져가서 처리한다. 코드 영역의 자원들은 프로그램이 모두 종료될 때 해제된다.

 

>  데이터(Data) 영역

 전역변수와 정적(Static)변수가 저장되는 공간이다. 두 변수의 공통점은 프로그램이 끝나기 전까지 해제되지 않는다는 것이다. 해제되지 않고 프로그램이 종료되기 전까지 남아 있어야 하는 변수는 데이터 영역에 할당된다.

 

>  힙(Heap) 영역

 동적 할당 영역으로 프로그램이 실행되는 도중에 일시적으로 필요할 대 메모리를 할당하고 사용 후 반납하는 영역이다. 힙 영역은 메모리의 주소값을 할당하며 이후 필요 없어지면 해제한다. 힙 영역을 해제할 때는 더 이상 메모리를 사용하지 않을 때 해제해야 메모리를 효율적으로 사용할 수 있다.  힙 영역은 스택에 실제 데이터가 저장되는 위치에 대한 주소값만을 저장한 후 필요할 때 주소값을 활용해 접근하여 사용한다.

  1. 스택 영역에 a를 만든다.
  2. C++같은 경우 'new'라는 키워드를 통해서 힙 공간에 int를 할당한 후 그 주소를 a에 할당한다.
  3. 그 공간에 100을 넣는다.
  4. 변수를 다 사용한 뒤에 할당을 해제한다.
 int main()
 {
        int *a;
        a = new int;
        *a = 100;
            delete a;

        return 0;
 }

 

 힙 영역은 스택에 비해 데이터 처리가 느리다. 그럼에도 힙 영역을 사용하는 이유는 다음과 같다.

  1. LIFE Cycle : 스택 메모리에서는 저장한 값이 스택과 함께 사라진다. 따라서 프로그램이 실행되는 동안 값을 저장하기 부적합하기에 힙 영역이 사용된다.
  2. Large Size: 커다란 객체를 스택에 무작정 할당할 경우 한정 된 스택 메모리에 다른 값을 쌓는 게 어려울 수 있기 때문에 스택에 주소만 주고 힙 메모리에 할당하여 메모리를 효율적으로 관리한다.
  3. Dynamic Memory: 처음부터 객체의 개수를 정하지 않고 필요할 때마다 객체 생성을 결정할 수 있기 때문에 힙 메모리를 사용합니다

 

>  스택(Stack) 영역

 정적 할당 영역으로 지역변수와 매개변수가 저장되는 공간이다. 메인 메소드를 포함한 모든 메소드가 적재되는 공간으로 메소드의 순서에 따라 할당되고 해제된다. 스택 방식은 후위선출(LIFO) 방식으로 나중에 들어온 코드가 실행 후 먼저 해제되는 방식을 사용한다. 모든 메소드의 실행이 끝나면 끝난 순서대로 해제된다.

 

4. 메모리를 알아야 하는 이유

 메모리는 한정된 자원이다. 변수에 따라 다른 메모리 영역을 사용하는 이유도 계속 사용할 변수와 잠깐 사용하고 해제할 변수를 메모리에 다르게 적재하여 원하는 시점에 변수를 할당 및 해제하기 위함이다. 메모리를 알고 효율적으로 사용하는 것은 개발에 있어 매우 중요하다.

 

5. 메모리 더 알아보기

>  함께 알아두면 좋은 용어

  • 컴파일과 인터프리터
  • 스택 오버플로우
  • 버퍼 오버플로우
  • 메모리 해제
  • 가비지 컬렉터