컴파일러가 어셈블리 메타 데이터에 상수 값을 저장하는 이유는 무엇입니까? 어셈블리 메타 데이터에서 중급 언어 코드에 직접 포함되어 있습니까?
컴파일러가 어셈블리 메타 데이터에 상수 값을 저장하는 이유는 무엇입니까? 어셈블리 메타 데이터에서 중급 언어 코드에 직접 포함되어 있습니까?
답변:
두 개의 어셈블리를 섞은 것 같습니다.
상수 는 정의 된 어셈블리 의 메타 데이터에만 저장 됩니다 . 메타 데이터에는 어셈블리의 모든 유형과 멤버에 대한 정보가 포함되며 상수는 멤버입니다.
상수에 대한 정보 는 사용 된 어셈블리에 저장되지 않습니다 . 상수 값은 소스에서 상수 번호 나 문자열을 직접 작성한 것처럼 IL에서 직접 사용됩니다.
예 : 내 응용 프로그램 중 하나가 많은 상수를 사용하여 데이터베이스 테이블과 필드를 식별합니다. 모든 상수 만 포함하는 하나의 어셈블리가 있습니다.
응용 프로그램을 빌드 할 때 Visual Studio의 "상수"어셈블리에 대한 참조를 추가합니다. 어셈블리에는 상수 만 포함되므로 내 응용 프로그램에는 해당 상수에 대한 참조가 없으며 "상수"어셈블리는 런타임에 필요하지 않습니다.
상수는 컴파일 타임에 알려진 다음 어셈블리의 메타 데이터에 저장됩니다. 이는 기본 유형의 상수 만 정의 할 수 있음을 의미합니다.
예, 메타 데이터에서 직접로드됩니다. 런타임에는 메모리 할당이 없습니다.