2014-01-28 2 views
0

클래스 A의 10 개 개체 배열을 만들면 각 개체에 대해 개체 메서드가 (어셈블리에서) 10 번 또는 다른 개체의 다른 데이터에 대해 작동 할 메서드 코드의 단일 인스턴스에 나타 납니 까?동일한 클래스의 다른 객체에 대한 메소드 코드가 실행 가능합니까?

+0

간단한 실험을 시도해보십시오. 몇 가지 메소드로 클래스를 생성하고 인스턴스 하나를 인스턴스화 한 다음 컴파일합니다. 실행 파일의 크기를 기록하십시오. 그런 다음 프로그램을 수정하여 1000 개의 인스턴스를 만들고 다시 컴파일하십시오. –

+0

런타임에 사용자가 선택한 크기의 배열을 만드는 경우 어떻게됩니까? 그것에 대해 생각해보십시오. – Jon

+0

어셈블리에 정의 된 메서드는 하나뿐입니다. 런타임에 클래스 또는 메서드가 제네릭 인 경우 여러 버전이있을 수 있습니다. – Lee

답변

3

아니요, 코드는 클래스에 속하며 한 번만 나타납니다. 배열과 객체는 실행 시간까지 존재하지 않습니다. 배열의 크기가 다를 수 있기 때문에 실행 파일에는 "충분한"복제 된 코드가 포함될 수 없습니다.

코드 자체는 모든 객체에 대해 동일하게 유지된다는 점에 유의하십시오. 파일에서도 메모리에 코드를 복사해도 무의미합니다. (JITted 코드는 기본 클래스와 파생 클래스 간의 인라인 차이를 고려하여 잠재적으로 달라질 수 있지만, 알고있는 한 Microsoft CLR에서는 발생하지 않는 경우가 있습니다.)

0

하나의 인스턴스 메소드의 일부는 실행 파일에 존재합니다. 메서드가 호출되면 작업 할 특정 개체의 데이터 멤버에 대한 포인터가 전달됩니다.

관련 문제