메모리 저장 방법

  1. 메모리란? 컴퓨터에서 메모리라고 하면 대부분 메인 메모리이고,  RAM(Random Access Memory)을 의미한다.
  2. 메모리의 역할 : 운영체제에서 프로그램을 실행할 때 처리할 내용이나 결과를 잠시 기억해두는데 이 때 메모리가 사용된다.
  3. 메모리 구분 영역
    1. 메모리는 Code, Data, Stack, Heap 이렇게 4개의 영역으로 나뉘어진다.
    2. 코드(Code)영역 : 프로그래밍 언어로 작성된 소스코드가 저장되는 영역으로 함수, 제어문, 상수 등이 여기에 할당된다.
    3. 데이터(Data)영역 : 프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야 소멸되는 영역으로 전역변수와 Static 변수가 할당된다.
    4. 스택(Stack)영역 : 프로그램이 자동으로 사용하는 임시 메모리 영역으로 함수 호출 시 생성되고 함수 실행이 완료될 때 소멸되는 영역으로 지역변수와 매개변수가 할당되며 컴파일 타임에 크기가 결정된다.
    5. 힙(Heap)영역 : 프로그래머가 할당/해제하는 영역으로 동적 할당(Dynamic Memory Allocation) 영역이라고 한다. 클래스가 할당되며 런 타임에 사용할 크기가 결정된다.
    6. 아래 그림은 Code, Data, Stack, Heap 영역을 그림으로 나타낸 것이다.
      (Stack, Heap 영역은 동일한 영역을 공유하며, Heap은 메모리의 윗쪽 주소부터 Stack은 메모리의 아래쪽 주소부터 할당되는 방식이다.)
  4. 메모리 저장 방법
    1. 프로그램 작성할 때 변수에 값을 할당하여 메모리에 저장할 때 저장하는 방법에 따라서 Value Type과 Reference Type으로 구분한다.
    2. Value Type : 변수에 값을 할당 시 메모리에 해당 값을 직접 저장하는 방식이다.
    3. Reference Type : 변수에 값을 할당 시 메모리에 해당 값을 직접 저장하지 않고, 값이 저장된 주소를 저장하는 방식이다.
    4. 변수를 저장하는 방법에 따라서 프로그램 작성 시에 유의할 사항
      1. 변수 i 에 1000을 할당하고, 변수 j 에 변수 i 를 할당(j = i)하는 경우 메모리 저장 방법에 따라서 처리 방식이 달라진다.
        1. Value Type으로 저장되는 경우는 아래와 같이 동작한다.
          Value Type
          int i, j;
          i = 1000;
          j = i; // 변수 j 에 변수 i 의 값을 할당 -> i = 1000 / j = 1000
          i = 100; // i = 100 / j = 1000 -> 변경 시에 영향이 없음
        2. Reference Type으로 저장되는 경우는 아래와 같이 동작한다.
          Reference Type
          int i, j;
          i = 1000;
          j = i; // 변수 j 에 변수 i 의 값이 저장된 주소값을 할당
          // -> i = 0x60000 / j = 0x60000
          i = 100; // i = 100 / j = 100 -> 하나 변경 시 같이 변경
        3. 현재 사용하고 있는 언어의 메모리 저장 방법에 따라 의도한 결과가 나오지 않을 수 있기 때문에 프로그램 작성 시에 유의해야한다.
참고사이트