C # 사양의 섹션에 대한 해석 필요


11

C # 사양을 읽고 있습니다. 세그먼트에 설명을 사용할 수 있습니다.

C #에는 통합 형식 시스템이 있습니다. int 및 double과 같은 기본 형식을 포함한 모든 C # 형식은 단일 루트 개체 형식에서 상속됩니다. 따라서 모든 유형은 공통 작업 세트를 공유하며 모든 유형의 값을 일관된 방식으로 저장, 전송 및 작동 할 수 있습니다. 또한 C #은 사용자 정의 참조 유형과 값 유형을 모두 지원하므로 객체의 동적 할당은 물론 경량 구조의 인라인 저장이 가능합니다.

이 맥락에서“경량 구조의 인라인 저장”은 무엇을 의미합니까?

답변:


11

Svick의 대답은 좋지만 몇 가지 추가 포인트를 추가 할 것이라고 생각했습니다.

먼저, 단락에 결함이 있습니다. 포인터 유형은 객체에서 상속되지 않습니다. 컴파일 타임에 인터페이스 유형 또는 유형 매개 변수 유형으로 알려진 값은 런타임에 유효하지 않은 참조 또는 객체에서 상속 된 무언가의 선례 인스턴스이지만 항상 이러한 유형이 " "상속으로부터 상속"; 상속은 조상의 구성원이 후손의 구성원이라는 속성이지만 일반적으로 "ToString"을 IEnumerable의 구성원으로 생각하지는 않습니다. IEnumerable 구현 하는 멤버로 생각합니다 .

이 부분은 스펙에 "primitive type"이 나타나는 유일한 곳이기 때문에 결함이 있으며 정의없이 나타납니다. 따라서 불필요하고 혼란 스럽기 때문에 제거해야합니다.

이 단락을 잠시 수정하고 싶었습니다. 다음에 Mads를 보자.

특정 질문을 해결하려면 : svick은 물론 정확하지만 특정 예제를 보는 것이 도움이됩니다. 네가 얘기 할 때:

struct ColorfulInt
{
    int value;
    Color color;
    ...
}

예를 들어 배열을 만듭니다.

ColorfulInt[] x = new ColorFulInt[100];

그런 다음 해당 100 int 및 100 Colors의 스토리지 는 어레이 자체에 저장됩니다 . ColorfulInt가 대신 클래스 인 경우 배열에는 ColorfulInt에 대한 100 개의 참조가 포함되며 각 참조는 개별적으로 할당되어야합니다. 이러한 백 개의 요소를 개별적으로 할당하는 것은 단순히 스토리지 자체를 스토리지 자체에 할당하는 것보다 시간과 공간에서 훨씬 덜 효율적입니다.


따라서 객체의 메모리 추상화에서 중요성이 있습니다. 객체를 조작 할 준비가되었을 때 주소 지정 가능한 공간 구절이 하나의 연속 된 블록에 있으면 누가 어디를 알 수 있습니까? 맞습니까, 아니면 여전히 뭔가 빠졌습니까?
ChuckT

@ChuckT : 맞습니다. 간접적 인 오버 헤드를 지불하지 않고 멋진 캐시 위치를 얻을 수 있습니다.
Eric Lippert

12

즉, 값 유형은 정의한 위치에 직접 저장되므로 참조 유형과 비교할 때 더 효율적입니다.

정확히 무엇을 의미합니까? 값 유형의 로컬 변수가있는 경우 일반적으로 스택에 직접 저장되지만 많은 예외가 있습니다. 값 유형의 필드가있는 경우이 필드는 묶는 클래스 또는 구조에 직접 저장됩니다.


1
말이 되네요 날 위해 살려줘 서 고마워, svick!
ChuckT
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.