Dlaczego kompilator przechowuje stałe wartości w metadanych zestawu? Czy są bezpośrednio osadzone w kodzie języka pośredniego z metadanych zestawu?
Dlaczego kompilator przechowuje stałe wartości w metadanych zestawu? Czy są bezpośrednio osadzone w kodzie języka pośredniego z metadanych zestawu?
Odpowiedzi:
Najlepszy sposób, aby o tym pomyśleć, to: W czasie kompilacji const jest konwertowany na literał, w którym jest używany.
Jedynym powodem, dla którego wchodzi w manifest w zestawie, w którym został zdefiniowany, było udostępnienie go konsumentom. Jest to część danego typu, a metadane tego typu są przechowywane w jego zestawie, a nie w zestawach, które go zużywają.
Jest to więc dosłowne zużycie w linii oraz właściwość lub pole w postaci materiałów eksploatacyjnych w metadanych.
Myślę, że mieszasz dwa zespoły.
Stała jest przechowywana tylko w metadanych w zespole, w którym jest zdefiniowana . Metadane zawierają informacje o wszystkich typach i elementach w zespole, a stałe są elementami.
Żadne informacje o stałej nie są przechowywane w zestawie, w którym są używane . Stała wartość jest używana bezpośrednio w IL tak, jakbyś zapisał stałą liczbę lub ciąg znaków bezpośrednio w źródle.
Przykład: jedna z moich aplikacji używa wielu stałych do identyfikowania tabel i pól bazy danych. Mam jeden zestaw, który zawiera tylko wszystkie stałe.
Kiedy buduję aplikację, dodaję odwołanie do zestawu „stałych” w Visual Studio. Ponieważ zestaw zawiera tylko stałe, nie ma odniesienia do niego w mojej aplikacji, a zestaw „stałych” nie jest potrzebny w czasie wykonywania.
Stałe są znane w czasie kompilacji, a następnie są przechowywane w metadanych zestawu. Oznacza to, że można definiować tylko stałe dla typów pierwotnych.
Tak, są one ładowane bezpośrednio z metadanych. W czasie wykonywania nie będzie alokacji pamięci.