Memory

tacoyaggi ㅣ 2024. 2. 2. 10:39

Memory 란?

  • 메모리는 데이터를 저장할 수 있는 공간임. (데이터 상자랄까)
  • 메모리에는 4가지 영역이 존재함. (코드, 데이터, 힙, 스택)

Code Memory 란?

  • 코드 메모리는 프로그램의 코드가 저장되는 공간임
  • 프로그램을 실행하고 나면 코드 메모리에 저장된 변수 or 함수를 수정할 수 없음 (프로그램을 실행하면 해당 데이터가 메모리에 올라가기 때문에 수정 XXX)
  • 소스코드 or 기계어로 제어되는 메모리 영역임
  • CPU는 코드 메모리에 저장된 명령어를 하나씩 가져와 처리함. (CPU 코어와 쓰레드가 많으면 빠른 이유! 우리가 고사양을 사용해야 하는 이유)
  • 자 그럼 저장이 언제 이루어지냐!? 프로그램이 실행되기 전에 컴파일 될 때 메모리에 저장 됨

Data Memory 란?

  • 데이터 메모리는 정적인 멤버변수 or 전역변수가 저장되는 공간임 (정적 == static, 전역 변수 == 함수의 외부에 선언된 변수)
  • 마찬가지로 컴파일 단계에서 메모리에 저장 됨
  • 프로그램이 시작될 때 할당되고 프로그램이 종료되기 전까지 메모리에 존재함
  • 프로그램 시작과 동시에 메모리에 할당되므로 new 키워드를 통한 인스턴스를 생성하지 않아도 사용 가능한거임

Heap Memory 란?

  • 힙은 클래스를 통해 생성한 인스턴스가 저장되는 공간임, TestClass test = new TestClass();
  • 사용자 정의에 의해 할당 데이터를 관리하는 동적 메모리임 (동적은 참조 형식이라고도 부름)
  • 함수 종료와 상관없이 데이터가 사라지지 않음 (클래스 단위이므로 기준이 프로그램이 아닌 함수임)
  • 참조 형식(동적)은 힙과 스택을 동시에 사용함. 힙 영역에는 데이터 값을 저장하고 스택 영역에서 데이터 주소를 저장함 (하이브리드임)
  • 함수가 종료되면 스택에 있는 메모리는 소멸됨. but 위에서 언급했듯이 힙에 있는 메모리는 계속 존재함(불사신..?)
  • 그럼 힙 메모리에 저장된 데이터는 언제 소멸되나? Garbage Collection 이 녀석이 판단해서 없애줌

Stack Memory 란?

  • 스택은 값 형식이 들어가는 메모리임. (값 형식은 참조 형식과 반대되는 녀석임)
  • 함수가 끝나면 자동으로 메모리에서 해제됨. (참조 형식과 반대이므로 함수가 종료되면 먼지 처럼 사라짐)
  • 스택 메모리는 push(저장) , pop(추출) 컨트롤 할 수 있음. (Stack 클래스의 함수임)
  • 스택은 후입선출(LIFO) 방식을 사용함. (선입 선출의 반대말임. 마지막에 들어온 데이터가 첫번째로 나감. 편의점 알바할 때 유통기한이 오래된 즉 먼저 들어온 제품 먼저 나가도록 진열하는 것과는 반대임)
  • int , char , bool , struct 이 스택 메모리에 할당되는 타입임. (나머지 것들은 모오오두 Heap!)
  • 함수 return 값과 지역 변수를 저장함. (함수가 호출될 때마다 새로운 스택이 생성되고 해당 함수의 지역 변수 및 함수 정보가 스택에 저장 됨)

 

'SW 구조 > OS' 카테고리의 다른 글

Thread  (0) 2024.02.02