개발자

C# 프로그램 실행을 했을 때 메모리에서 어떻게 이루어지는지 공부하는데 어려워서 정리가 안되네요. 그리고 C# 컴파일 구조 등등도..

2023년 08월 26일조회 209

안녕하세요, 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을 기계어로 변환해서 실행합니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!