바인딩의 정의 중 하나는 함수 이름을 메모리 주소로 바꾸는 행위라는 것입니다.가상 메서드가 초기 바인딩으로 간주되는 이유는 무엇입니까?
a) 따라서 초기 바인딩은 컴파일 프로세스 중에 함수 호출이 메모리 주소로 대체되었다고 가정합니다. 후기 바인딩을 사용하면 런타임에이 대체가 발생합니다.
b) 가상 메서드가 초기 바인딩으로 간주되는 이유 (따라서 대상 메서드가 컴파일 타임에 발견되어이 메서드를 호출하는 코드가 만들어 짐)? 지금까지 내가 아는 한, 가상 메소드를 사용하면 실제 메소드 호출은 런타임 중에 만 해결되고 컴파일 시간은 필요하지 않습니까?!
고맙습니다
편집 :
1) 지금까지 내가, 그것을 (따라서하는 경우 힙에 컴파일 타임에 알려져 있지 않다 알고
A a=new A();
a.M();
메모리 주소)는 실행 중에 인스턴스 a
이 생성됩니다. 초기 바인딩을 사용하면 컴파일 과정에서 함수 호출이 메모리 주소로 대체됩니다. 하지만 컴파일러는 함수 호출을 메모리 주소로 대체 할 수 있습니다. 실행시 힙이 어디에서 처리 될지 모르는 경우 (예 : 과 같은 메모리 위치에있는 메소드 a.M
의 주소를 가정 할 때)?
2)
V-테이블 통화도 초기 나 바인딩 후반이다. 대신 함수 포인터 테이블에 오프셋이 있습니다. 오프셋은 컴파일 타임에 고정되지만 함수 포인터가 선택되는 테이블은 오브젝트의 런타임 유형에 따라 달라지며 (오브젝트에는 v 테이블에 대한 숨겨진 포인터가 포함됨) 최종 함수 주소가 런타임에 발견됩니다.
그러나 유형 T
의 목적을 가정
T
의 존재를 알지 못한다), 그럼 어떻게 컴파일시에 객체의 유형에 대한 진입 점을 존재할 수 있습니까?
적어도로드 시간까지 C#이 바인딩을하지 않기 때문에 C#이 올바른 태그인지 확신 할 수 없습니다. – Joshua