C# (.NET)에서 메서드 (가상, 정적, 비 가상)가 클래스 크기에 어떻게 영향을 줍니까?C# 클래스 크기 계산
답변
각 메소드는 바이트 코드를 보유하기 위해 메모리를 사용합니다. 코드는 각 방법에 대해 한 번만 존재하며 각 인스턴스에 대해 한 번씩 존재하지는 않습니다.
인스턴스 메소드 (가상 또는 비 가상)를 추가하고 제거해도 할당 된 객체의 크기는 변경되지 않습니다. 이것은 가상 메소드를 추가 할 때 때때로 할당 된 객체의 크기가 증가하는 C++와는 다릅니다. C++과 마찬가지로 정적 메서드는 할당 된 객체의 크기를 변경하지 않습니다.
¹ 제네릭 메서드의 경우 인스턴스화 된 각 유형 집합에 대해 하나의 복사본이 있습니다.
편집 : 댓글에 대한 응답으로, 나는 더 자세히 설명 할 것이다.
@ 리차드 : 사실 일 수도 있고 아닐 수도 있습니다 (변경 될 수도 있음). 일리노이 바이트 코드의 사본 하나만 필요합니다. 하나의 메소드 설명자 블록은 개방형 생성 메소드 및 닫혀있는 생성 메소드에 필요하고 일반 유형 매개 변수 (일반 유형 정의의 일반 매개 변수화 된 기본 유형에 일반 인수가있는 메소드)를 여전히 포함하는 생성 된 인스턴스에 대한 설명자를 필요로합니다. 일반적으로 네이티브 코드의 복사본은 0 또는 더 많은 참조 유형에 대해 하나의 값 형식과 하나의 닫힌 생성 된 인스턴스에 대해 유지되지만 0 (JIT되지 않음/방금 해석 된 값) 또는 두 개 이상 (기본 및 최적화 컴파일러. 최적화 된 JIT로 다시 컴파일 된 이후 하나 이상의 호출 스택이 기준 버전을 벗어나지 않은 경우). 다시 편집 : 제네릭 매개 변수 제약 조건은 인스턴스화 된 모든 참조 형식에 대해 네이티브 코드 복사본 하나만 허용한다는 점에서 옳습니다.
고마워, 그게 내가 원하는거야. 공식적인 참고 문헌을 줄 수 있습니까? –
단일 유형 매개 변수가있는 일반 메소드의 경우 일반 유형이 인스턴스화 된 각 값 유형에 대해 하나의 사본이 존재하며 모든 참조 유형에 대해 한 번 (참조 유형에 대해 인스턴스화되지 않은 경우 0) 사본이 존재합니다. 여러 유형 매개 변수의 각 조합을 확장하십시오 ... – Richard
나는 그가 전체 크기가 아닌 인스턴스 크기를 요구한다고 생각합니다. –
인스턴스 당 크기는 메서드가 아닌 클래스의 필드에 따라 다릅니다. 구현 세부 사항에 따라 인터페이스 구현시 인스턴스의 공간 (인터페이스 당 포인터 크기의 슬롯 하나)을 차지할 수도 있지만이를 보장 할 수는 없습니다.
향후 변경 될 수 있으므로 구현 정의 동작에 대한 "공식 참조"를 찾는 것은 어려울 것입니다.
- 1. DB 백업 크기 계산
- 2. PDFSharp로 텍스트 크기 계산
- 3. 글꼴 크기 계산
- 4. iphone - 글꼴 크기 계산
- 5. wxWidgets 잘못된 프레임 크기 계산
- 6. 스크롤 막대 thumtrack 크기 계산
- 7. WPF TextBox 다시 계산 크기
- 8. HTTPS POST 요청 크기 계산
- 9. 파이썬에서 웹 페이지 크기 계산
- 10. Android의 클래스 인스턴스 크기
- 11. 승리 및 손실 행진의 크기 계산
- 12. 이미지 크기 조정 계산 - 현재 상황은 무엇입니까?
- 13. CString 크기 클래스
- 14. C#의 인스턴스 크기
- 15. 크기 표기 숫자의 합을 계산 하시겠습니까?
- 16. Array :: pack 형식 문자열의 크기 계산
- 17. 크기 조정 및 계산 된 높이 - 버그
- 18. 풀 블리드 이미지 크기 조정 계산
- 19. Android : 필요한 View 개체 크기 계산
- 20. 암호화 된 데이터의 최대 크기 계산
- 21. 태그 클라우드 글꼴 크기 계산 논리
- 22. WPF : 내용에 따라 창 크기 계산
- 23. div의 계산 된 글꼴 크기 얻기
- 24. C++ 클래스 및 링크 된 목록 : 항목 추가 및 계산
- 25. 계산 문제 C++
- 26. C# 빠른 해시 계산
- 27. C++ : 움직이는 FPS 계산
- 28. C# 달러 명칭 계산
- 29. C - 계산 시간은
- 30. 좌표 계산 Objective-C
어셈블리의 컴파일 된 클래스, 클래스 또는 메모리의 클래스 인스턴스 크기를 포함하는 소스 코드 파일을 의미합니까? –
인스턴스의 크기를 의미합니다. 크기를 계산할 때 sizeof() 변수를 사용할 수 없습니다 (컴파일러 오류). 'MyClass'에 미리 정의 된 크기가 없으므로 sizeof를 안전하지 않은 컨텍스트에서만 사용할 수 있습니다. System.Runtime.InteropServices.Marshal을 사용하십시오. SizeOf) Marshal.SizeOf()는 런타임에 같은 오류를 발생시킵니다. StructLayoutAttribute를 클래스 선언에 적용하면 sizeof()는 1을 반환합니다. –