ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 메모리구조
    컴퓨터상식/운영체제(OS) 2022. 3. 4. 03:21

    1. 메모리 구조

    프로그램이 실행되면  운영체제(OS)는 메모리(RAM)에 이 프로그램을 위한 공간을 할당

    - 공간은 다음과 같이 총 4가지(Code, Data, Heap, Stack)으로 나뉜다

    1-1. 코드(Code) 영역   

     

    기계어는 컴퓨터가 읽을 수 있는 가장 밑단의 언어로  0과 1로만 이루어진 언어를 의미

     

     

    1-2. 데이터(Data) 영역

     

    Swift 예제

    name과 age는 전역 변수로, country는 static 상수로,  데이터 영역에 할당됨

     

     

    1-3. 힙(Heap) 영역    

     

    위 정의에서 malloc, calloc으로 힙에 메모리(전역변수, static변수)를 할당한다고 했는데, 스위프트에선 위 함수들을 통해 직접 할당할 일이 없지만   자동으로 힙에 할당하고 있었음

    --> 클래스 인스턴스(Class Instance), 클로저 같은 참조 타입의 값 들은 모두 힙에 자동 할당 

     

    힙을 사용하고 나면 반드시 "메모리 해제"를 해줘야 하지만, ARC를 통해 힙에 할당된 메모리가 더이상 쓸모 없어지면 (참조되지 않으면) 자동으로 해제

     

    * 힙 구조의 장단점

    장점  메모리 크기에 대한 제한 없음
     본질적인 범위가 전역이기 때문에, 프로그램의 모든 함수에서 액세스 할 수 있음
    단점  할당작업, 해제 작업으로 인한 속도 저하
     힙 손상(이중 해제, 해제 후 사용 등) 작업으로 인한 속도 저하
     힙 경합(두 개 이상 쓰레드가 동시에 접근하려 할 때 Lock이 걸림)으로 인한 속도 저하
     메모리를 직접 관리해야 함(해제해주지 않을 시 메모리 누수 발생)

     

     

    1-4. 스택(Stack) 영역   

    스택은 프로그램이 자동으로 사용하는 임시 메모리 영역을 의미

     

     

    함수를 호출했을때

     

    OS는 내부적으로 함수 안에 선언된 파라미터, 지역변수 등을 스택에 할당

    --> add 함수가 종료되는 시점에 스택에 저장된 메모리는 모두 알아서 반환

     

    * stack 장단점

    장점  CPU가 스택 메모리를 효율적으로 구성하기 때문에 속도가 매우 빠름
     메모리를 직접 해제를 해주지 않아도 됨
    단점  메모리 크기에 대한 제한 있음
     지역 변수만 액세스 가능

     

    스택은 메모리 크기에 대한 제한이 있기 때문에  메모리를 무한히 할당할 수 없는 것이 가장 큰 단점

     

     


    2. 힙 vs 스택

     

    2-1. 언제 힙을 쓰고, 언제 스택을 쓰나요?

     

    (인스턴스, 클로저 등 자동으로 힙에 할당되는 것 외에  직접 할당할 경우!)

     

    스택은 메모리가 한정되어 있기 때문에 너무 큰 메모리는 할당 불가

    ->  데이터의 크기를 모르거나, 스택에 저장하기엔 큰 데이터의 경우엔 힙에 할당 하고 그 외엔 스택에 할당

     

    스택에 너무 많은 메모리를 할당하면 stack overflow가 발생

     

     

     

    2-2. 힙과 스택의 메모리 관계

    힙과 스택을 나누어서 설명 했지만, 힙과 스택은 같은 메모리 영역을 공유

     

    같은 메모리 공간이지만

    힙 영역 낮은 메모리 주소부터 할당 받는 것이고, 스택 영역 높은 메모리 주소부터 할당 받는다

     

    따라서 힙 또한 자신의 영역 외로 확장하려다 보면, 힙 오버 플로우라는 것이 발생

     

     

     

     

    출처: https://babbab2.tistory.com/25

    댓글

Designed by Tistory.