블릿터블 타입
Blittable types![]() | 이 글은 그 주제에 익숙하지 않은 사람들에게는 불충분한 맥락을 제공한다.2018년 5월 (이 를 하는 방법과 에 대해 ) |
「Blittable type」은, Microsoft 의 데이터 타입입니다.관리 대상 코드와 비관리 대상 코드 모두에 대해 메모리에 동일한 프레젠테이션을 가진 NET 프레임워크.의 상호 운용성을 실현하기 위한2가지 기술인 COM Interop 또는 P/Invoke 를 사용하는 경우, blittable 타입과 non-blittable 타입의 차이를 이해하면 도움이 됩니다.NET 어플리케이션
기원.
메모리 카피 조작은, 블록 전송이라고 불리기도 하고, 비트 블릿(및 그러한 전송을 실시하는 전용 하드웨어는 블리터라고 불립니다)으로 단축되기도 합니다.Blittable은 입니다.블록 전송을 사용하여 개체를 복사하는 것이 합법적인지 여부를 나타내는 NET 고유 용어.
상호 운용성의 개요
상호 운용성은 관리 대상 외 코드와 관리 대상 코드 간의 데이터 및 메서드의 양방향 공유입니다.NET 코드...NET 에는, COM Interop 와 P/Invoke 의 2 개의 상호 운용 방법이 있습니다.방법론은 다르지만 두 경우 모두 마셜링(데이터 표현, 호출 함수 형식 및 반환 값 형식 간의 변환)을 수행해야 합니다.COM Interop은 관리 코드와 COM 개체 간의 이러한 변환을 처리하는 반면 P/Invoke는 관리 코드와 Win32 코드 간의 상호 작용을 처리합니다.데이터 타입의 브리팅과 비브리팅의 개념은 양쪽 모두에 적용됩니다.특히 관리 대상 메모리와 관리 대상 메모리 간의 데이터 변환 문제에 적용됩니다.이 마샬링은 인터op 마샬러에 의해 실행되며 필요에 따라 CLR에 의해 자동으로 호출됩니다.
정의된 블릿터블 유형
blittable type은 기본적으로 관리 대상 메모리와 관리 대상 외 메모리에 공통적으로 표시되므로 interop marcher의 특별한 주의가 필요하지 않은 데이터 유형입니다.데이터를 메모리에 고정함으로써 가비지 컬렉터는 데이터를 이동할 수 없게 되어 관리되지 않는 [1]응용 프로그램과 데이터를 인플레이스 공유할 수 있게 됩니다.즉, 관리 대상 코드와 관리 대상 코드 모두 이러한 유형의 메모리 위치를 일관되게 변경할 수 있으며 데이터 무결성을 유지하기 위해 보안관이 필요로 하는 작업도 훨씬 줄어듭니다.다음으로 에서 사용할 수 있는 블릿 가능 타입의 예를 나타냅니다.NET 프레임워크:[2]
System.Byte
System.SByte
System.Int16
System.UInt16
System.Int32
System.UInt32
System.Int64
System.UInt64
System.IntPtr
System.UIntPtr
System.Single
System.Double
또한 이러한 유형의 1차원 배열(안전하지 않은 고정 버퍼 포함) 및 이러한 유형의 인스턴스 필드(읽기 전용 필드 포함)만 포함하는 복잡한 유형은 분할할 수 있습니다.블리팅 불가능한 스태틱필드 또는 컨스턴트필드가 존재해도 이러한 필드는 마샬링에 관여하지 않기 때문에 이러한 필드는 블리팅되지 않습니다.복잡한 유형(구조체 또는 클래스)에도 [StructLayout]속성을 사용하여 적용된 시퀀셜의 인스턴스 필드 레이아웃이 있어야 합니다.NET 보안관구조체에는 컴파일러에 의해 이 속성이 자동으로 적용되지만, 그렇지 않으면 blittable이 아닌 클래스를 blittable로 만들려면 클래스 정의에 명시적으로 추가해야 합니다.
유형이 블릿 가능 유형 중 하나가 아닌 경우 비블릿 가능 유형으로 분류됩니다.타입이 블리트 불가능으로 간주되는 이유는 관리 대상 메모리의 1개의 표현에 대해 관리 대상 외 메모리에 여러 개의 표현이 있을 수 있으며 그 반대의 경우도 있을 수 있기 때문입니다.또는 관리되는 메모리와 관리되지 않는 메모리 모두에서 유형을 정확히 한 개씩 나타낼 수 있습니다.또한 단순히 한쪽이나 다른 한쪽이 대표성이 없는 경우도 종종 있다.에서 일반적으로 사용되는 비트 불가능 유형을 다음에 나타냅니다.NET 프레임워크:[2]
System.Boolean
System.Char
System.Object
System.String
블리팅 가능한 타입과 비블리팅 가능한 타입이 많이 있습니다.사용자 정의 타입은 정의 방법(MSDN)에 따라 어느 카테고리에나 들어갈 수 있습니다.
사용.
이 매우 제한적인 개념으로 인해 에서 제공하는 상호운용성 서비스의 유용성이 제한될 수 있습니다.NET, 하지만 그렇지 않습니다.blittable 타입은 상호 운용 가능한 타입을 쉽게 정의할 수 있지만 interop 마셜러에 의해 [3][4]blittable 타입이 변환되는 방법을 명시적으로 정의하는 방법은 다양합니다.예를 들어, 입니다.NET 언어에는 유형 필드, 유형 자체 및 메서드 파라미터에 적용할 수 있는 많은 속성이 있으며 이러한 특정 데이터를 어떻게 처리하는지를 보안관에게 지시합니다.이러한 속성에는 유형 패킹 또는 정렬 상세, 유형 필드 오프셋 지정, 배열 또는 문자열 표현 지정, 함수 호출 파라미터 전달 스타일 제어, 메모리 관리 기술 지정 등 다양한 목적이 있습니다.프레임워크에서 제공되는 속성 또는 기타 툴이 모두 적절하지 않은 경우 세부 제어는 구현 능력에 의해 제공됩니다.ICustomMarshaler
양방향 데이터 변환을 수동으로 수행합니다.무엇이 블릿터블 타입을 구성하는지를 이해하는 것으로써, 개발자는 타입을 올바르게 정리하기 위해서 개입이 필요한 상황과 필요하지 않은 상황을 특정할 수 있다.이렇게 하면 유형이나 함수 호출의 과잉 지정에 낭비되는 시간이 줄어듭니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "MSDN Magazine - P/Invoke Revisited". Msdn.microsoft.com. Retrieved 2011-12-05.
- ^ a b "MSDN - Blittable and Non-Blittable Types". Msdn.microsoft.com. Retrieved 2016-02-05.
- ^ "MSDN - Interop Marshaling Overview". Msdn.microsoft.com. Retrieved 2016-02-05.
- ^ "MSDN - .NET Interoperability". Msdn2.microsoft.com. Retrieved 2011-12-05.