Ответ 1
Как и где хранятся эти значения статического поля?
Они сохраняются в памяти в месте выбора CLR.
Очевидно, он хранится в памяти, но я хочу знать об этой памяти.
Я предполагаю из любопытства. Если вы принимаете решение о программировании на основе ответа на этот вопрос, вы делаете что-то неправильно.
Это куча?
Ну это не складывается или регистрируется, что точно.
Это какая-то специальная память CLR?
Да.
Как это называется?
Высокочастотная куча.
Что еще хранится таким образом?
виртуальные таблицы. Структуры структуры интерфейса. Описание методов. И что-нибудь еще, что, по мнению CLR, будет часто посещаться по собственному усмотрению CLR. Мы подробно расскажем о деталях реализации.
JITter создает единую реализацию
MyDict<__Canon>
для всех аргументов ссылочного типаMyDict<T>
.
Правильно, хотя это детализация реализации.
Тем не менее значения сохраняются отдельно.
Под "значениями" вы подразумеваете "значения статических полей каждого построенного типа". Да.
Я предполагаю, что для каждого аргумента типа
существует еще какая-то структура типа-типа-аргумента,
Да, данные должны куда-то идти!
vtable связана с JITted
MyDict<__Canon>
, поля являются отдельными.
Я не понимаю, что означает это предложение, поэтому я не могу подтвердить или опровергнуть его правильность.
Я также задаюсь вопросом, есть ли способ иметь хранилища для каждого объекта. То есть не общий тип + T, но объект + T
Чтобы уточнить, ваш вопрос: существует механизм хранения, который связывает общий тип C<T>
и заданную конструкцию C<Foo>
с заданным статическим полем C<Foo>
. Мы можем думать об этом как о поиске, где "ключ" - это кортеж (C<T>
, Foo
, field
), а значение - это значение поля. Есть ли аналогичный механизм хранения, где ключ (C<T>
, some arbitrary object
, field
)?
Нет. Постройте его самостоятельно, если вам это нужно.