목적
- 힙, 스택이라는 메모리 구조에 대해 학습한다.
- UnManaged Language와 Managed Languaged의 메모리 관리하는 방법의 차이를 학습한다.
- 어떤 상황에서 두 언어를 사용해야 하는지 학습한다.
Managed, UnManaged Languaged의 개념
- Unmanaged Language: 힙 영역에 잡혀진 메모리를 직접 관리 가능
TestA() {
class* a = new class();
//=> 이 구문을 실행 시 힙 영역에 할당 된다.
}
//블록문 벗어났을 때 수동으로 지우지 않으면 메모리가 남아 있다.
- Managed Language: 힙 영역에 잡혀진 메모리가 GC(Garbage Collector)에서 자동으로 관리
TestB() {
class b = new class();
//=> 이 구문을 실행 시 힙 영역에 할당 된다.
}
//블록문 벗어나면 메모리가 남아 있지만 GC가 감지한다.
- Managed/UnManaged 다 동일한 방식으로 구현
Managed Language, UnManaged Language의 예시
- UnManaged Language: C, C++, Rust, Objectice-C
- Managed Language: Java, Python, C#, Ruby
결론
- 구현에 필요한 환경과 용도에 따라 적절한 언어를 선택하는 것이 중요
- Compact한 메모리 관리가 필요하고 빠른 연산이 필요한 경우 UnManaged Language가 적합
- 메모리 제약이 크고 대용량 서비스를 안정성 있게 다루어야 하는 경우 Managed Language가 적합