자료구조

Memory

elisha0103 2023. 5. 3. 15:53

메모리 구조

가상 메모리

  • 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 할당해 RAM을 관리하는 방식

배경

  • 실제 물리적인 메모리 용량에 한계가 있기 때문에 큰 단일 프로그램이나, 복수의 프로그램을 실행시킬 수 없다.

사용

  • 보조기억장치에 가상의 메모리 공간을 확보하고 프로그램에서 필요한 부분만 메모리에 적재해서 사용한다.
  • 물리적인 메모리가 부족한 경우에도 보조기억장치를 사용하여 프로그램을 실행할 수 있기 때문에, 시스템의 안정성과 신뢰성을 높일 수 있다.
  • 사용 속도는 물리메모리보다 느리다는 단점이 있다.
  • 운영체제는 가상메모리에서 단위 메모리 블록 개념을 사용하여 효율적으로 필요한 만큼의 메모리 공간을 할당한다.

메모리 구조 - 가상 주소 공간

  • 가상 메모리에서 프로그램에 할당된 메모리 공간을 가상 주소 공간이라고 하며, 이들은 메모리 블록으로 구성된다.

가상 메모리 구조

코드 영역

  • 실제 프로그램의 동작을 수행하는 명령어와 전역 상수가 저장된다.
  • 이 영역은 읽기 전용으로 데이터가 변경되지 않는다.

데이터 영역 - (Data, Bss)

  • 전역 변수와 정적 변수가 저장되는 영역이다. 프로그램이 실행될 때(컴파일) 할당되고, 종료될 때 해제된다. 데이터 영역을 상세하게 구분하면 Data, Bss 영역이 있는데, 초기화 된 데이터는 data영역에, 초기화 되지 않은 데이터는 bss(block stated symbol) 영역에 저장된다.

스택 영역

  • 함수 호출과 관계되는 지역 변수와 매개 변수가 저장되는 영역이다.
  • 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.
  • 일반적으로 컴파일러 기본 설정에 의한 용량으로 영역이 제한되는데, 프로그램이 스택 영역 이상으로 공간을 할당하려고 한다면 스택 오버플로우 에러가 발생한다.

힙 영역

  • 개발자가 자유롭게 할당하고 해제할 수 있는 영역이다.
  • 개발자에 의해 관리되므로 메모리 누수가 발생할 수 있다.
  • 힙 영역에 데이터를 할당하고 사용한 후에는 반드시 해제해야 한다.

iOS 운영체제의 힙 영역은 어떤 자료구조를 사용하는가?

  • 힙 영역과 이진 힙 자료구조는 다른 개념이다.
  • Tips for Allocating Memory (apple.com) 를 참고하면 iOS에서 힙 영역은 malloc 을 기반으로 구성된다고 한다. malloc은 연결리스트 기반으로 이루어진다.

ARC

ARC 코드 개선

  • Swift의 ARC는 Automatic Reference Counting의 약자로, 객체의 수명 주기를 관리하기 위한 메모리 관리 기술 중 하나입니다. 이는 Swift에서 자동으로 메모리를 관리하는 방법 중 하나로, 개발자가 객체에 대한 메모리 관리를 수동으로 처리하지 않아도 되도록 도와줍니다.
  • ARC는 객체가 생성될 때, 객체를 가리키는 각 변수나 상수의 참조 카운트를 1 증가시킨다. 객체가 더 이상 필요하지 않을 때는 해당 변수나 상수가 참조하던 객체의 참조 카운트를 1 감소시키며, 이 카운트가 0이 되면 해당 객체가 메모리에서 해제된다.

장점

  • 개발자가 수동으로 메모리 관리를 하지 않아도 된다. 이로 인해 개발자는 더욱 집중적으로 코드 작성에 집중할 수 있으며, 런타임 오류를 줄일 수 있다. 또한, 메모리 관리를 자동으로 처리하므로 메모리 누수를 방지할 수도 있다.

단점

  • 참조 카운트의 증가 / 감소와 같은 추가 작업이 발생하여 성능저하가 발생할 수 있다.
  • 순환 참조 문제와 같은 객체 수명 주기 관리 문제가 발생할 수 있다.

ARC의 구조

  • ARC는 참조 데이터 블록을 stack 형식으로 저장하여 카운팅한다.
  • autoreleasepool 참조 카운트가 stack에 저장되고, 데이터 객체를 연결리스트를 통해 추적하여 해제 시점에서 카운팅을 줄이는 방식으로 구성된다.

 

출처

Transitioning to ARC Release Notes (apple.com)

코딩의 시작, TCP School

 

'자료구조' 카테고리의 다른 글

HashTable  (0) 2023.06.06
Stack, Queue  (0) 2023.05.16
Tree  (1) 2023.05.13
Array, Linked List  (0) 2023.05.12