본문 바로가기
프로그래밍 놀이터/C, C++, C#, VB

[Java 개발자가 공부해본 C#] Stack Memory, Heap Memory, Variable, Reference 의 관계

by 돼지왕 왕돼지 2012. 4. 15.
반응형


안녕하세요 돼지왕왕돼지입니다.

C# 을 공부하면서 그동안 뭔가 깔끔히 정리되지 않았던 Stack Memory, Heap Memory, Variable, Reference 의 관계에 정리가 잘 되는 그림 및 글을 발견하여 함께 공유하고자 합니다.

이를 이해하는 것은 Garbage Collection 을 운영하는 Java 와 C# 에 매우 중요합니다.

 <C# 코드>

void test(){
    object a = 10;
    object b = 20;
}


<함수 안에서의 memory 구조>


 
이런식으로 Stack 에 Heap 주소를 참조하는 a, b 각각의 variable 이 assign 됩니다.
integer 이긴 하지만, object 에 값을 할당하였기 때문에 그 값은 Heap memory 에 assign 됩니다.


<함수가 끝난 후의 memory 구조>


함수가 끝나면 기본적으로 local variable 형태로 쓰여 stack 에 공간을 차지하고 있던 변수들은 제거됩니다. ( pop ) 그럼 이제 heap memory 를 참조하는 link 가 끊어지게 되고, 저 2000 과 4000 주소에 있는 heap memory 공간은 garbage collection 공간의 됩니다.

문제는 global variable 을 사용할 때인데, 원리는 같기 때문에 reference를 사용 후 계속 사용하지 않는다면 바로 해제해주는 메모리 관리 측면에서 좋습니다.



어떤가요? 그림으로 보니깐 이해가 쫌 쉽죠?




반응형

댓글