ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • _Process_memory_structure
    Programming/_Common 2023. 9. 19. 16:01

     프로그래밍을하면 변수의 타입에 따라 변수가 위치할 메모리 섹션이 결정된다.

    배열과 객체는 힙영역, 내장 기본 타입의 변수는 스택영역에 할당된다.

    메모리 구조를 모른채로 프로그래밍을 하기도 하지만, C++에서는 선언하는 변수에 따라 변수가 위치하는 메모리 섹션이 달라져서 그에 따라 성능에 유의미한 차이를 만든다고 한다.

    (OS가 가상메모리를 제어한다.)

    32bit 프로세스의 메모리 구조

    위의 그림은 32bit 프로세서 메모리 구조로 32bit 시스템에서는 메모리 주소가 32bit로 표현된다.

    커널 메모리가 1 ~ 2 GB를 차지하기 때문에 실제로 유저 영역의 메모리 크기는 2 ~ 3 GB이다.

    각 박스는 메모리 섹션 또는 세그먼트라고 부른다.


    힙(Heap)

    힙은 프로세스가 동작하며 동적으로 할당, 해제되는 메모리 섹션이다.

    OS에서 가용 메모리를 탐색하고 파편화를 최소화 하도록 관리를 한다.

    만약 힙 메모리의 할당이 잦으면 프로세스의 동작속도가 느려진다.

    힙 메모리 해제가 필요한 상황에서 바로 해제하지 않고 동일한 객체 타입이 다시 필요한 상황에서는 재활용하기 위해서 별도의 풀을 만들어서 관리를 하는것이 일반적이다. → (이러한 최적화 기법을 오브젝트 풀링이라 함.)

     

    스택(Stack)

    스택은 함수의 지역 변수, 파라미터 등이 위치하는 메모리 섹션이다.

    함수가 호출되면 

    각 함수의 스택 프레임의 크기, 프레임 내의 지역변수 위치컴파일 타임에 결정된다.

    만약, 컴파일을 할 때, 길이 정보가 결정되지 않은 배열을 지역변수로 선언한다면, 스택 프레임의 크기를 임의로 더 크게 잡아서 메모리 관리 측면에서 낭비가 발생한다.


    메모리는 RAM을 이야기 하며 OS를 통해 제어하는가?

     오늘 이야기한 메모리는 가상메모리를 이야기하며 램과는 차이가 있음.

    가상메모리의 크기는 정해지지 않았지만, 물리적 크기는 정해져 있음.

    멀티에서는 램크기가 충분하지 않아서 하드와 SSD에 페이징(임시저장)을 함.

    페이징이 증가할수록 프로그램의 성능이 떨어짐.

     

    힙은 동적 할당이어서 크기 제한없이 사용되는가?

    32bit, 64bit로 크기가 정해짐. 위의 32bit 프로세스 메모리의 경우 유저 영역에서 2, 3 GB 사용가능.

     

    소멸자가 힙을 위해 사용되는가?

    힙을 관리하기위해 사용되는게 맞음.

    'Programming > _Common' 카테고리의 다른 글

    _Type  (0) 2023.07.19
    _Bit & Byte  (0) 2023.07.19
    _literal_constant  (0) 2023.07.15
Designed by Tistory.