2009. 1. 8. 10:12

■ 값타입과 참조타입의 메모리 형성의 차이 ■

1.스택과 힙에 대해 말한다
 
스택이란 처리해야할 요청을 저장하는 데이터 저장소 또는 버퍼이다.
IBM의 컴퓨터 사전을 보면 스택은 항상 PUSHDOWN 목록이라고나와있는데 이는 새로운 요청이 들어오면 그것은 이전의 것을 밑으로 눌러 내린다는 의미이다.
스택을 바라보는 또다른 방법은 처리할 항목을 항상 스택의 최상위로부터 가져오는 프로그램이라고 이해하는 것이다.

힙은 프로그램이 실행될 때까지는 알 수 없는 가변적인 량만큼의 데이터를 저장하기 위해 프로그램의 프로세스가 사용할 수 있도록 미리 예약되어 있는 메인 메모리의 영역이다.
예를 들면 하나의 프로그램은 처리를 위해 한 명이상의 사용자로부터 서로 다른 양의 입력을 받을 수 있으며 즉시 모든 입력데이터에 대해 처리를 개시한다.
운영체계로부터 이미 확보된 일정량의 힙 저장공간을 가지고 있으면 저장과 관련된 처리를 좀 더 쉽게 할 수 있으며 일반적으로 필요할 때마다 운영체계의 운영체계에게 매번 저장공간을 요청하는 것보다 빠르다.
프로세스는 필요할 때 heap 블록을 요구하고 더 이상 필요 없을 때 반환하며 이따금씩 자투리모으기를 수행함으로써 자신에게 할당된 heap을 관리한다.
여기서 자투리모으기란 더 이상 사용되지 않는 블록들을 사용 가능한 상태로 만들고 또한 heap 내의 사용 가능한 공간을 인지함으로써 사용되지 않은 작은 조각들이 낭비되지 않도록 하는 것을 말한다.

힙은 이 용어는 분명히 다른 용어인 스택(stack)의 영향을 받았다.
스택은 블록들이 저장공간으로부터 어떤 순서에 입각하여 꺼내어지고 또 같은 방법으로 반환된다는 것을 제외하고는 heap과 비슷하다.


2.값타입과 참조타입의 메모리 형성의 차이

값타입과 참조타입은 메모리가 생성되는 부분이 다르다.
일반적으로 값타입(Value Type)은 스택(Stack)에 메모리가 생성되며 그리고 참조타입(Reference Type)은 힙 Heap)에 메모리가 생성된다고 생각한다.
하지만 참조타입은 스택과 힙영역을 동시에 사용하게 된다.

값타입과 참조타입은 참조타입의 경우 참조값은 스택에 실제의 메모리는 힙영역에 생성하는 되는 것이다.
우리가 특정 클래스를 이용하여 객체의 이름만 만들었다면 스택에 4바이트의 참조값을 위한 공간이 확보되는 것이다.
그리고 new 연산자로 객체의 메모리를 생성하였다면 그때에 힙영역에 해당 객체의 메모리가 생성되는 것이다.
이에 반해 값타입은 변수이름의 선언과 동시에 스택영역에 메모리를 확보하게 된다.

Trackback 0 Comment 0