개발자
안녕하세요, C# 메모리를 대해서 공부 중인 대학생 4학년 입니다. 1.제가 처음 배운 기본적인 프로세스 기반으로 프로그램 안에 코드 영역, 데이터 영역, 힙, 스택이 있는데 C# 프로그램은 다르다고 합니다. c# 4.0 - what is the difference between object and loader heap in .net 4.0 - Stack Overflow 에서는 <원문> heap memory is divided into to parts,object heap and loader heap(also known as high frequency heap).All non static reference type are stored on object heap and all static object(either reference type or value type) are stored in loader heap. Gc never work on loader heap thats why they initilized only once and remain in memory throught the application. <해석> 힙 메모리는 두 부분으로 나뉩니다. "객체 힙"과 "로더 힙" (또는 고주파 힙이라고도 함)으로 나눌 수 있습니다. 모든 정적이 아닌 참조 유형은 객체 힙에 저장되며, 모든 정적 객체 (참조 유형이든 값 유형이든)은 로더 힙에 저장됩니다. 가비지 컬렉터(GC)는 로더 힙 에서 작업하지 않으므로 이러한 객체는 애플리케이션이 실행되는 동안 한 번만 초기화되고 메모리에 유지됩니다. 라고 되어 있어서 그럼 C# = 코드 영역, 데이터 영역, 힙(객채 힙, 로드 힙), 스택이 있는데 제가 배운 걸로는 데이터 영역에 정적 객채들이 저장된다고 알고 있는데 그럼 정적 객체들과 함수들은 로드 힙에 저장되고 데이터 영역 에는 뭐가 저장되는 건가요? 2. C# 컴파일 구조는 어떻게 되어 있는 건가요?
답변 1
1. 말씀하신 코드, 데이터, 힙, 스택은 운영체제의 메모리 영역입니다. object heap과 loader heap은 CLR의 메모리 영역입니다. 각각의 힙이 운영체제의 어느 메모리 영역에 매핑될지 추측하기는 어렵습니다. 언어의 스펙으로 정해진게 아니고 구현에 달렸기 때문입니다. 쉽게 말해 컴파일러 코드를 분석해서 어느 영역에 메모리를 할당하는지 알아낸다고 해도 다음 버전이 되면 또 바뀔 수 있습니다. 2. C# 컴파일러는 코드를 CIL 이라는 언어로 컴파일 합니다. CLR은 CIL을 기계어로 변환해서 실행합니다.
강민기
작성자
취업준비생 • 2023년 09월 28일
답변해주셔서 감사합니다!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!