-
[기술 면접 공부] C#의 메모리 구조기술 면접 공부 2021. 1. 7. 10:51
4가지 메모리 영역
Stack 영역 지역 변수, 매개 변수 저장, 컴파일 시점에 크기 할당하는 정적 할당을 사용 Heap 영역 사용자 관리 영역, 사용자 정의에 의해 할당된 메모리에 저장하거나 해제하는 동적 할당을 사용 Data 영역 전역 변수, static 변수, 프로그램이 종료될 때까지 지워지지 않고 컴파일 시점에 크기 할당 Code 영역 소스 코드, 기계어로 제어되는 메모리 영역 Stack 영역
값 형식(Value Type)이 들어가는 메모리 공간이다. 일반적인 value type인 int, char, bool 같은 것이 있다. (string은 reference type이다) 사용자가 선언한 struct도 value type으로 stack에 저장된다. 선언되었던 코드 블록이 끝나면 자동으로 메모리에서 해제된다.
Heap 영역
참조 형식(reference type)이 추가되는 메모리 공간이다. 코드 블록과 상관없이 데이터가 사라지지 않는다. 참조 형식의 변수는 heap과 stack 영역을 동시에 이용하는데 heap 영역에는 데이터의 값을 저장하고, stack 영역에는 데이터의 주소를 저장한다. 따라서 코드 블록이 끝나는 순간 stack에 있는 데이터의 주소는 사라지지만 heap 영역에 존재하는 데이터의 값은 남아있게 된다. C#에서는 가비지 컬렉터(GC : Garbage Collector)가 주기적으로 heap을 청소한다.
자주 나오는 질문
stack overflow란 무엇인가?
할당된 스택 내에 stack frame이 쌓이게 되는데, 과도한 재귀 또는 너무 큰 지역 변수를 선언하게 되면 stack 영역의 크기를 초과하게 되면서 다른 메모리 영역을 침범하는 현상
stack frame : 함수의 매개 변수, 반환 주소 값, 함수 내부의 지역 변수 등 함수의 호출 정보
그렇다면 heap overflow도 있는가?
사용자가 heap 메모리를 관리해야하는데 할당된 메모리 크기를 초과하게 되면 역시 똑같이 다른 메모리 영역을 침범한다. C#의 경우 GC가 알아서 관리해주지만 의도하지 않게 계속 참조하고 있거나 너무 큰 값을 할당하면 발생할 수 있다.
'기술 면접 공부' 카테고리의 다른 글
[기술 면접 공부] C# 코루틴 (Coroutine) (1) 2021.01.07 [기술 면접 공부] Factory Pattern (팩토리 패턴) (0) 2021.01.07 [기술 면접 공부] C#의 메모리 관리 (0) 2021.01.07 [기술 면접 공부] 싱글톤 패턴 (0) 2021.01.06 [기술 면접 공부] 추상 클래스, abstract (0) 2021.01.06