아디봉의.net
프로그램과 메모리 , 스택과 힙 본문
프로세스란?
프로그램이 로딩되어 실행가능한 상태가 되었을 때의 메모리를 프로세스라고 한다.
구성
1.데이터 메모리 영역 - 프로그램에서 사용하는 데이터들을 모아두는 메모리공간
2.클래스영역(코드메모리 영역) - 프로그램의 코드가 위치하는
3.스택메모리 영역- 프로그램이 실행될때 필요한 메모리 공간
stack메모리 영역
* 함수가 호출되는 데 필요한 메모리
- 지역변수 (local variable)
- 매개변수 (parameter)
- 리턴값이 저장될 곳(return value)
이들 메모리는 함수 하나당 하나씩 필요함. 함수를 호출하기 전에 반드시 호출에 필요한 메모리를 stack에 만들어야 한다. 이때 하나의 함수에 필요한 메모리 덩어리를 묶어서 스택 프레임(stack frame)이라고한다.
stack frame 의 구성요소
- 지역변수
- 매개변수
- 리턴값을 위한 공간
* 함수호출과 스택프레임
- 하나의 함수를 호출하면 함수에 해당하는 스택 프레임이 스택에 만들어진다.
- 함수마다 하나의 스택 프레임이 만들어진다.
- 함수의 호출이 끝나면 스택 프레임은 스택에서 제거된다.
*stack frame 과 heap메모리
c#의 메모리
- stack memory = 함수내에서 선언된 변수는 무조건 스택에 만들어진다.
- heap = new 를 이용해서 만든 메모리는 무조건 힙에 만들어진다.
ex)
class Top //8byte짜리 메모리지도
{
private int q; //4byte 스택에 만들어짐
private int[] p = new int[100]; //4byte 스택에 만들어짐
}
public static void mian(){
Top t = new Top(); //new Top()라고 했을 때 만들어지는 Top의 메모리 는 힙에 만들어진다.
}
Top형은 8byte짜리 메모리 지도이다. 멤버 q가 4byte이며, 참조변수 p또한 Top형의 객체를 생성하면 힙에 만들어진다.
그리고 8byte Top형의 메모리가 힙에 만들어지는 것과 동시에 new int[100]에 해당하는 메모리가 힙 영역에 만들어진다. 그리고 그의 참조값은 힙영역의 p에 저장된다.
스택과 힙 이외의 다른 메모리는 존재하지도 않으며, 오직 스택과힙 메모리를 이용해서 프로그램의 작업을 수행하게 된다.
Garbage Collector
c++에서는 new연산자로 메모리 할당을 했을시에 반드시 delete로 해제를 해주어야 했다. 하지만
c#에서는 가비지컬렉터가 CLR내에서 동작하면서 메모리의 청소가 필요하다고 생각될 때 시스템에 의해서 구동되는 메모리 청소부와 같은 역할 을 한다.
사용자가 가비지컬렉터 호출시 GC.Collect()를 이용해 강제로 호출한다.
가비지 컬렉터의 관리대상은 힙에 생성되는 객체의 메모리 이다.
'C#' 카테고리의 다른 글
C# static 과 상수 (0) | 2012.09.16 |
---|---|
call by XXX (0) | 2012.09.16 |
구조체와 클래스의 차이 (0) | 2012.09.14 |
SOA, ESB, BPM, REST (0) | 2012.09.14 |
C# 값.참조타입 메모리정의, 객체& 인스턴스정의 (0) | 2012.09.14 |