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