선형, 비선형 메모리

2경빈·2025년 5월 4일

CS

목록 보기
8/11

1. 선형 메모리 (Linear Memory)

선형 메모리는 데이터가 연속적으로 저장되는 구조이다. 메모리 주소가 연속적이고 순차적으로 접근할 수 있다. 즉, 한 번에 데이터에 접근하는 것이 효율적이다. 선형 메모리의 예시는 **배열(Array)**와 **스택(Stack)**이 있다.

ex)

배열(Array): 배열은 메모리에서 연속적으로 할당된다. 배열의 인덱스를 통해 순차적으로 데이터를 읽고 쓸 수 있다. 배열의 각 원소는 메모리에서 연속적인 위치를 차지한다.

스택(Stack): 스택은 후입선출(LIFO) 방식으로 데이터를 저장한다. 스택은 메모리 상에서 연속적으로 데이터를 쌓아가며, 스택에 들어간 데이터는 나중에 들어간 데이터부터 빠져나온다.

메모리 배치:

  • 스택(Stack): 함수 호출 시 생성되는 지역 변수들이 스택에 저장된다. 스택은 연속적인 메모리 공간을 사용하여, 함수가 끝나면 자동으로 메모리가 해제된다.
  • 배열: 배열의 요소들은 메모리 상에서 연속된 위치에 저장되어, 배열 인덱스를 통해 빠르게 접근할 수 있다.

장점

  • 빠른 접근 속도
    • 데이터가 연속적으로 배치되어 있기 때문에, 메모리 내에서 인덱스를 통해 즉시 접근이 가능하다.
  • 예측 가능한 성능
    • 메모리 구조가 단순하므로, 성능 예측이 용이하다. 예를 들어, 배열이나 스택은 크기와 구조가 고정적이어서 특정 연산의 시간 복잡도를 쉽게 예측할 수 있다.
  • 메모리 사용 효율
    • 연속된 메모리 공간을 할당받기 때문에 메모리 단편화가 적고, 공간을 효율적으로 사용할 수 있다.

단점

  • 유연성 부족
    • 크기가 고정된 배열은 크기를 변경할 수 없기 때문에, 데이터를 추가하거나 삭제하는 데 유연성이 떨어진다. (스택과 큐도 유사)
  • 공간 낭비
    • 배열을 생성할 때 고정된 크기를 지정해야 하므로, 실제 사용되지 않는 공간이 발생할 수 있다.
  • 동적 크기 할당의 어려움
    • 동적으로 크기가 변하는 데이터를 처리할 때 배열을 사용하면 복잡도가 증가한다

2. 비선형 메모리 (Non-linear Memory)

비선형 메모리는 데이터가 연속적이지 않고, 논리적으로 연결된 방식으로 저장된다. 데이터가 메모리 상에서 비연속적으로 배치되고, 각 데이터 항목은 **포인터(혹은 참조)**를 통해 서로 연결된다. 비선형 메모리에서는 데이터들이 독립적인 메모리 공간에 저장되며, 포인터를 통해 연결된다.

ex)

링크드 리스트(Linked List): 링크드 리스트는 각 노드가 서로 다른 메모리 위치에 저장되며, 각 노드는 다음 노드를 가리키는 포인터를 포함한다. 데이터가 메모리 상에서 연속적으로 배치되지 않지만, 포인터를 통해 연결되어 있다.

트리(Tree): 트리 구조는 각 노드가 부모-자식 관계를 가지고 있으며, 각 노드는 자식 노드를 가리키는 포인터를 포함한다. 트리 구조는 여러 수준(level)으로 나뉘어 있고, 그 데이터들이 연속적이지 않게 메모리에 배치된다.

그래프(Graph): 그래프는 노드와 엣지로 이루어져 있으며, 노드들 간의 관계가 다양하게 연결된다. 노드들이 메모리 상에서 비연속적으로 저장되며, 포인터를 통해 서로 연결된다.

메모리 배치:

  • 힙(Heap): 객체 인스턴스가 new 키워드로 생성될 때 힙 메모리에 할당된다. 객체는 연속된 메모리 공간에 저장되지 않으며, 각 객체는 메모리 상에서 분리된 위치에 할당된다. 그 후, 객체들 간의 연결 관계를 포인터참조를 통해 관리한다.
  • 링크드 리스트(Linked List): 각 노드는 데이터와 함께 다음 노드를 가리키는 포인터를 가지고 있으며, 메모리 상에서 연속적이지 않게 저장된다. 예를 들어, 첫 번째 노드는 두 번째 노드를 가리키고, 두 번째 노드는 세 번째 노드를 가리키는 방식이다.

장점

  • 유연한 크기 조정
    • 링크드 리스트와 같은 비선형 구조는 동적으로 크기를 변경할 수 있어 데이터를 추가하거나 삭제하는 데 매우 유연하다.
  • 효율적인 메모리 사용
    • 비선형 구조는 필요할 때마다 노드를 동적으로 할당하므로 메모리 낭비가 적고, 데이터가 점점 추가될 때 유리하다.
  • 복잡한 관계 표현
    • 트리나 그래프와 같은 구조는 복잡한 데이터 간의 관계를 표현하는 데 강력하다. 예를 들어, 계층 구조나 관계망을 모델링할 때 유용하다.

단점

  • 느린 접근 속도
    • 데이터를 순차적으로 탐색해야 하므로, 인덱스를 통해 즉시 접근할 수 없는 경우가 많다. 예를 들어, 링크드 리스트에서는 데이터를 순차적으로 따라가야 하므로 접근 속도가 느리다.
  • 메모리 관리 복잡성
    • 메모리가 동적으로 할당되므로, 개발자가 메모리 관리에 신경을 써야 한다. 예를 들어, 링크드 리스트에서는 노드가 하나씩 연결되는데, 메모리 해제가 제대로 이루어지지 않으면 메모리 누수가 발생할 수 있다.
  • 복잡한 구현
    • 비선형 구조는 구현이 상대적으로 복잡하다. 트리나 그래프는 여러 연결을 다루어야 하기 때문에 배열에 비해 구현이 더 복잡하다.

3. 선형 메모리와 비선형 메모리의 차이점

특징선형 메모리 (Linear Memory)비선형 메모리 (Non-linear Memory)
데이터 배치 방식데이터가 연속적으로 배치데이터가 비연속적으로 배치
데이터 접근 방식순차적 접근 (배열, 스택 등)논리적 관계에 따라 접근 (링크드 리스트, 트리 등)
메모리 구조배열, 스택, 큐 등링크드 리스트, 트리, 그래프 등
성능접근 속도가 빠르고 예측 가능데이터 간의 관계를 따라가야 하므로 접근이 느림
메모리 관리자동 관리 (스택은 함수 종료 시 자동 해제)수동 관리 (힙 메모리에서 동적 할당 필요)
예시배열, 스택, 큐, 버퍼 등링크드 리스트, 트리, 그래프 등

결론

선형 메모리는 데이터가 연속적으로 저장되는 구조로, 배열이나 스택처럼 데이터가 순차적으로 쌓이거나 배열된 형태이다. 메모리 상에서 순차적으로 접근하는 데 효율적이다.

비선형 메모리는 데이터가 연속적이지 않고, 논리적으로 연결된 방식으로 저장되는 구조이다. 링크드 리스트, 트리, 그래프처럼 데이터 간의 관계를 포인터참조를 통해 연결하며, 데이터를 접근할 때 더 복잡한 방식으로 접근해야 한다.

따라서, 힙 메모리스택 메모리는 각각 선형과 비선형 메모리의 구조를 잘 보여주는 예시이다. 스택은 선형적인 구조이고, 은 비선형적인 방식으로 메모리를 할당하며 관리한다.

  • 선형 메모리 구조는 빠르고 간단하지만, 데이터 크기가 고정적이거나 유연성이 부족할 수 있다.
  • 비선형 메모리 구조는 복잡한 관계를 표현하고, 동적 메모리 할당이 가능하지만, 성능과 구현이 상대적으로 더 복잡하고 느릴 수 있다.
profile
eggs before hatching

0개의 댓글