C#에서는 값, 레퍼런스의 두 가지의 저장방법이 있다.
int x = 10 과 같이 내장된 데이터 형을 선언할 때 스택에 10라는 값이 들어가고 해당 스택에 x라는 이름이 붙는다
레퍼런스 저장은 오브젝트 저장에 사용된다. 클래스에서 오브젝트를 생성하면 해당 오브젝트는 참조 방식으로 저장된다
참조 유형은 힙이라는 공간에 저장되는데 스택에는 해당 힙의 주소가 저장되고 힙에는 실제 값이 저장된다
즉, 스택에 있는 주소가 힙의 값을 가르키고 있는 것이다.
스택은 정적 할당에 사용되고 메서드가 끝나면 사라진다.
힙은 동적 할당에 사용되며 오브젝트를 생성하면 자동으로 메모리에 할당된다. 또 GC라는 곳에서 자동으로 할당을 해제한다.
대충 이렇게 알고 있는데
1.굳이 정적, 동적을 나눠서 쓰는이유
2.클래스에 static을 붙이면 스택에 저장되는가?
3.3. 오브젝트의 값을 변경하면 (class.age = 23 ) 힙의 값만 변경되는가? 스택의 주소와 힙의 값이 같이 변경되는가?
위의 의문이 듬
일단 그렇게만 알고 넘어가면 나중에 이해 된다는데 진짜 그래?
이런걸 왜 고민해 그냥 코딩만하면 되지
하다보니 궁금해져서 그냥 넘어갈까? 필요할때 공부하게
1. 컴파일 언어의 경우 동적으로 생성 될 일 없는 변수의 경우 메모리에 정적으로 박아 놓으면 성능 상 이점이 있음
1. 지역변수의 경우 코드의 흐름대로 변수의 선언 및 반환이 시간의 흐름대로 일어나는데 그걸 스택 영역에 넣으면 메모리 offset 변경 만으로 이런 일이 가능함
2. 아마 스택과 힙영역 말고 별도의 영역이 있을거임
3. 주소는 그대로고 실제 값이 변경 됨
ㄳㄳ 저렇게 나누고 사용하는건 성능상 이점때문이구나
어셈블리 기회되면 공부해보삼
1번은 좋은 의문인데 2, 3번은 직접적으로 상관없어
os 공부하면 알게됨