마샬링이란 무엇이며 왜 필요합니까?
int
C #에서 C로 유선을 통해 전송할 수없고 마샬링해야 한다는 사실을 믿기 어렵 습니다. 왜 C #은 시작 및 종료 신호와 함께 32 비트를 보낼 수 int
없습니까?
마샬링이 필요한 이유와 사용 방법에 대한 좋은 튜토리얼이나 사이트가 있다면 좋을 것입니다.
답변
언어와 환경에 따라 호출 규칙, 레이아웃 규칙, 기본 요소 크기 ( char
C # 및 C 참조 char
), 객체 생성 / 파괴 규칙 및 디자인 지침이 다르기 때문입니다. 관리되는 토지에서 관리되지 않는 토지를보고 이해할 수있는 어딘가로 물건을 가져갈 수있는 방법이 필요합니다. 그것이 마샬링의 목적입니다.
답변
.NET 코드 (C #, VB)는 CLR ( 공용 언어 런타임 )에 의해 “관리”되기 때문에 “관리”라고합니다.
C, C ++ 또는 어셈블러로 코드를 작성하는 경우 CLR이 포함되지 않으므로 모두 “관리되지 않는”코드라고합니다. 모든 메모리 할당 / 할당 해제에 대한 책임은 귀하에게 있습니다.
마샬링 은 관리 코드와 비 관리 코드 간의 프로세스입니다. CLR에서 제공하는 가장 중요한 서비스 중 하나입니다 .
답변
마샬링 int
은 이상적으로는 말한 것입니다. CLR의 관리 스택에서 C 코드가 볼 수있는 곳으로 메모리를 복사하는 것입니다. 문자열, 객체, 배열 및 기타 유형을 마샬링하는 것은 어려운 일입니다.
그러나 P / Invoke interop 레이어는 이러한 거의 모든 것을 처리합니다.
답변
Vinko가 주석에서 말했듯이 특별한 마샬링없이 기본 유형을 전달할 수 있습니다. 이를 “blittable”유형이라고하며 byte, short, int, long 등과 같은 유형과 서명되지 않은 대응 유형을 포함합니다.
이 페이지에는 blittable 및 non-blittable 유형 목록이 포함되어 있습니다 .
답변
마샬링은 핀 보크를 사용하여 관리되지 않는 세계의 데이터 유형과 통신하고 그 반대의 경우에도 더 나은 단어 또는 게이트웨이를 원하기위한 “중간”이며 데이터가 안전한 방식으로 반환되도록합니다.
답변
마샬링은 함수의 시그니처를 다른 시스템에있는 다른 프로세스로 전달하며 일반적으로 구조화 된 데이터를 전용 형식으로 변환하여 다른 프로세서 시스템으로 전송할 수 있습니다 (직렬화 / 비 직렬화).