source

"관리"와 "관리되지 않음"의 차이

myloves 2023. 4. 19. 00:44

"관리"와 "관리되지 않음"의 차이

에 대해 이야기할 때 가끔 듣거나 읽습니다.NET(예: "관리 코드"와 "관리되지 않은 코드")는 있지만, 어떤 코드인지, 어떤 차이가 있는지 알 수 없습니다.정의상 그들의 차이점은 무엇일까요?둘 중 하나를 사용하면 어떤 결과가 초래됩니까?이 구별이 에 존재합니까?NET/Windows만?

관리 코드

관리 코드는 Visual Basic 입니다.NET 컴파일러와 C# 컴파일러가 작성됩니다.CLR(Common Language Runtime)에서 실행되며 가비지 컬렉션, 런타임 유형 검사, 참조 검사 등의 서비스를 제공합니다.'내 코드는 CLR에 의해 관리된다'라고 생각해 주세요.

Visual Basic 및 C#은 관리 대상 코드만 생성할 수 있으므로 이러한 언어 중 하나로 애플리케이션을 작성할 경우 CLR에 의해 관리되는 애플리케이션을 작성합니다.애플리케이션을 Visual C++로 쓰고 있는 경우.NET 필요에 따라 관리 코드를 생성할 수 있지만, 옵션입니다.

비관리 코드

관리되지 않는 코드는 기계 코드로 바로 컴파일됩니다.따라서 기존의 C/C++ 컴파일러에 의해 컴파일된 모든 코드는 '관리되지 않는 코드'입니다.또한 중간 언어가 아닌 기계어로 컴파일되므로 휴대할 수 없습니다.

CLR에 의해 제공되는 빈 메모리 관리 및 기타 기능은 없습니다.

Visual Basic 또는 C#을 사용하여 관리되지 않는 코드를 생성할 수 없으므로 Visual Studio에서는 모든 관리되지 않는 코드가 C/C++로 작성됩니다.

두 가지를 섞다

Visual C++는 관리 대상 코드 또는 관리 대상 외 코드로 컴파일할 수 있으므로 동일한 응용 프로그램에서 두 코드를 혼합할 수 있습니다.이로 인해 둘 사이의 경계가 모호해지고 정의가 복잡해지지만, 예를 들어 서드파티 라이브러리를 잘못 기술된 관리 대상 코드와 함께 사용하더라도 메모리 누수가 발생할 수 있다는 점을 알아두시기 바랍니다.

다음은 구글 검색에서 찾은 예입니다.

#using <mscorlib.dll>
using namespace System;

#include "stdio.h"

void ManagedFunction()
{
    printf("Hello, I'm managed in this section\n");
}

#pragma unmanaged
UnmanagedFunction()
{
    printf("Hello, I am unmanaged through the wonder of IJW!\n");
    ManagedFunction();
}

#pragma managed
int main()
{
    UnmanagedFunction();
    return 0;
}

이것은 보다 일반적입니다.NET 및 Windows.관리란 자동 메모리 관리, 가비지 수집, 타입 세이프티, ...관리되지 않는 것이 전부인 환경을 말합니다.예를 들어,NET은 관리 대상 환경이며 C/C++는 관리 대상 외입니다.

관리 코드는 공통 언어 런타임 가상 머신(바이트 코드)의 「관리」하에서만 실행되는 컴퓨터 프로그램 코드를 식별하기 위해서 Microsoft에 의해서 작성된 차별화입니다.

http://en.wikipedia.org/wiki/Managed_code

http://www.developer.com/net/cplus/article.php/2197621/Managed-Unmanaged-Native-What-Kind-of-Code-Is-This.htm

언급URL : https://stackoverflow.com/questions/3563870/difference-between-managed-and-unmanaged