관리 코드와 비 관리 코드, 메모리 및 크기의 차이점은 무엇입니까?
관리되는 코드와 관리되지 않는 코드에 대해 많이보고 듣고, 관리되는 코드와 관리되지 않는 코드는 CLR에없는 관리되지 않는 코드는 CLR 외부에없는 점만 알면 자세히 알고 싶습니다. 관리 및 비 관리 코드, 메모리 및 크기에 대한 모든 것은 무엇입니까?
C # 코드 인 동안 내가 C # 코드는 어떻게 관리되지 않을까요? 예와 약간의 필요한 것이 도움이 될 것입니다.
짧은 답변 :
- 관리 코드 는 .NET CIL로 작성하고 .NET 코드 (VB.NET, C # 등)입니다 .
- 비 코드 코드 는 직접 기계 코드를 관리 하는 .NET에없는 코드입니다.
긴 대답 :
관리 코드 란?
관리 코드는 Visual Basic .NET 및 C # 컴파일러가 만드는 것입니다. 컴퓨터에서 직접 수있는 기계어 코드가 아닌 IL (중간 언어)로 나타납니다. CIL은 만든 코드의 클래스, 메서드 및 특성 (예 : 보안 요구 사항)을 설명하는 메타 데이터와 함께 어셈블리라는 파일에 보관됩니다. 이 어셈블리는 .NET 세계에서 배포의 원 색상 쇼핑 단위입니다. 어셈블리를 다른 서버에 복사하여 거기에 어셈블리를 배포합니다. 해당 복사가 배포에 필요한 유일한 종종 단계입니다.
관리 코드는 공용 언어 실행에서 실행됩니다. 실행은 실행중인 코드에 다양한 서비스를 제공합니다. 일반적인 이벤트 과정에서 먼저 어셈블리를로드하고 확인하여 CIL이 정상인지 확인합니다. 그런 다음 메서드가 호출 할 실행은 어셈블리가 실행중인 컴퓨터에 있고 컴퓨터 코드로 실행할 때 사용할 수 있고 다음에 메서드가 호출 될 때 사용할 수 있습니다. 컴퓨터 코드를 캐시합니다. (이를 Just In Time 또는 JIT 선택하거나 종종 Jitting이라고합니다.)
어셈블리가 실행주기 런타임은, 메모리 관리, 스레딩 보안 레지스터 서비스를 계속 제공합니다. 애플리케이션은 실행에 의해 관리됩니다.
Visual Basic .NET 및 C #은 관리 코드 만 생성 할 수 있습니다. 이러한 응용 프로그램으로 작업하는 경우 관리 코드를 만드는 것입니다. Visual C ++ .NET은 다음과 같은 경우 관리 코드를 생성 할 수 있습니다. 프로젝트를 만들 때 이름이 .Managed.로 시작하는 응용 프로그램 유형 중 하나를 선택합니다 (예 : .Managed C ++ 응용 프로그램 ..
비 관리 코드 란?
비 관리 코드는 Visual Studio .NET 2002가 출시되기 전에 만드는 데 사용하는 코드입니다. Visual Basic 6, Visual C ++ 6, 도대체 15 년 된 C 컴파일러조차도 여전히 하드 드라이브에서 모든 비 관리 코드를 생성 할 수 있습니다. 그것은 당신이 그것을 선택하는 머신에서 실행 된 머신 코드로 직접 실행합니다. 그리고 같은 칩을 가지고 거의 같은 것을 가지고 있고 머신에서 실행됩니다. 보이지 않는 운영에서 보안이나 메모리 관리와 서비스를 얻지 않았습니다. 운영에서 가져 왔습니다. 그리고 중요한 것은 일반적으로 Windows SDK에서 제공하는 API를 호출하여 요청하여 운영에서 명시 적으로 가져 왔습니다. 더 최근의 관리되지 않는 응용 프로그램은 COM 호출을 통해 운영 서비스를 제공합니다.
Visual Studio의 다른 Microsoft 언어와 달리 Visual C ++는 관리되지 않는 응용 프로그램을 만들 수 있습니다. 프로젝트를 생성하지 않고 MFC, ATL 또는 Win32로 시작하는 애플리케이션 유형을 선택하면 관리하는 애플리케이션이 생성됩니다.
이로 인해 혼동이 보관 수 있습니다. .Managed C ++ 애플리케이션을 만들 때 빌드 제품은 .exe를 가진 CIL 어셈블리입니다. MFC 응용 프로그램을 만들 때 빌드 제품은 확장명이 .exe 인 내장 코드의 Windows 실행 파일입니다. 두 파일의 내부가 완전히 삭제되었습니다. 중급 언어 디스어셈블러 인 ildasm을 사용하여 어셈블리 내부를 살펴보고 메타 데이터와 CIL을 볼 수 있습니다. 관리되지 않는 exe에서 ildasm을 가리키면 유효한 CLR (공용 언어 작동) 헤더가없고 분해 할 수있는 다른 메시지가 표시됩니다 (동일한 확장명, 완전히 파일).
외장 코드는 어떻습니까?
코드라는 문구는 두 가지가 많이 사용됩니다. 많은 사람들이 관리되지 않는 코드의 동의어로 사용합니다. 즉, 이전 도구로 빌드되거나 Visual C ++에서 실행되지 않고 대신 실행되지 않습니다. 이것은 완전한 응용 프로그램이거나 새로운 세계로 실행될 때 이전 코드를 사용할 수있는 두 가지 강력한 도구 인 COM Interop 또는 PInvoke를 사용하여 관리 코드에서 호출되는 COM 구성 요소 또는 DLL 일 수 있습니다. .unmanaged 코드를 선호합니다. 이것은 코드가 실행의 서비스를 얻지 못함을 강조하기 때문입니다. 예를 들어 관리 코드의 코드 액세스 보안은 다른 서버에서로드 된 코드가 특정 파괴적인 작업을 수행하지 못하도록 방지합니다. 애플리케이션이 다른 서버에서로드 된 비 관리 코드를 호출하는 경우 해당 보호를받을 수 없습니다.
원시 코드라는 구의 다른 용도는 실행에서 실행되는 기계어 코드 인 것 JIT 컴파일러의 출력을 설명하는 것입니다. 관리 CIL이 아니라 기계 코드입니다. 결과적으로 native = 관리되지 않는 가정하지
( 출처 )
이것은 C 컴파일러에 의해 생성 된 기계어 코드와 관리되는 프로그램에서 JIT 컴파일러에 의해 생성 된 기계어 코드 사이의 많은 미묘한 차이에 대해 이야기하는 매우 긴 대답이 될 수 있습니다. 책이 필요한데 필요한 길지만 설치된 책은 이미 존재합니다. 예를 들어 Jeffrey Richter의 모든 것.
모든 미묘한 차이가 하나의 규칙으로 귀결되기 때문에 짧고 깔끔하게 유지하겠습니다.
관리 코드는 가비지 수집 된 힙에서 메모리를 할당하는 코드입니다.
일반적으로 관리되는 코드는 잘 보관 비 관리 (네이티브) 코드보다 런타임 메모리 공간이 더 먹을 것입니다.
관리 코드는 애플리케이션 도메인에서 실행되고 비 관리 코드는 운영 프로세스에서 실행됩니다.
관리되지 않는 코드 :-
1. .NET Framework 외부에서 개발 된 코드를 비 관리 코드라고합니다.
2. CLR의 제어하에 실행되지 않는 응용 프로그램은 관리되지 않으며, C ++와 같은 특정 언어를 사용하여 운영의 하위 수준 기능에 액세스하는 등의 응용 프로그램을 사용할 수 있습니다. VB, ASP 및 COM 코드와 백그라운드 백그라운드는 관리되지 않는 코드의 예입니다.
3. 비 관리 코드는 래퍼 클래스를 사용하여 실행됩니다.
4. 래퍼 클래스에는 CCW (COM Callable Wrapper)와 RCW (Runtime Callable Wrapper)의 두 가지 유형이 있습니다.
5. 래퍼는 CCW와 RCW의 도움으로 차이를 커버하는 데 사용됩니다. 관리 코드 애플리케이션 도메인에있는 리소스는 관리 코드입니다. 도메인 고유 리소스가 더 빠 사용.
관리 코드 1. .NET 프레임 워크에서 개발 된 코드를 관리 코드라고합니다. 이 코드는 관리 코드 실행을 통해 CLR에서 직접 실행됩니다. .NET Framework로 모든 언어는 관리 코드입니다.
2. 관리 코드는 관리, 보안 처리, 언어 간 메모리 허용 등을 통해 애플리케이션을 차례로 관리하는 CLR을 사용합니다.
OS에서 직접 실행되는 앱은
관리되지 않는 앱
.net 프레임 워크에서 실행되는 앱은
관리 앱
'ProgramingTip' 카테고리의 다른 글
logger.info와 logger.debug의 차이점 (0) | 2020.11.07 |
---|---|
4 바이트를 int로 변환 (0) | 2020.11.07 |
목록에서 n 개의 임의 요소 가져 오기 (0) | 2020.11.07 |
div 호버 배경색 변경? (0) | 2020.11.07 |
jQuery $ (document) .ready () 두 번 실행 (0) | 2020.11.07 |