C #. Где хранятся структурные методы кода в памяти? - PullRequest
11 голосов
/ 09 марта 2010

В некоторой степени известно, где .NET хранит типы значений в памяти (в основном в стеке, но при определенных обстоятельствах и т. Д.) ...

Мой вопрос - где находится код структуры?

Если я скажу 16 байтов полей данных в структуре и метод массивных вычислений в нем - я предполагаю, что 16 байтов будут скопированы в стек, а код метода будет сохранен где-то еще и будет использоваться для всех экземпляров структура.

Верны ли эти предположения?

Ответы [ 3 ]

5 голосов
/ 09 марта 2010

MSIL хранится в разделе кода сборки, который Windows отображает в памяти при первой загрузке сборки. При первом запуске метода JIT скомпилирует код MSIL в код x86 / x64. Как только метод скомпилирован в память, он обычно остается там и будет использоваться всеми потоками. Есть некоторые обстоятельства, когда несколько доменов приложений приводят к компиляции MSIL во второй раз, но это редко.

2 голосов
/ 09 марта 2010

Это отличная статья для выяснения, что и куда идет.

1 голос
/ 09 марта 2010

Да. В основном методы управляются отдельно в некоторой структуре, которая - в основном - не настолько хорошо известна и документирована (как никто никогда не нуждается).

он также хранится в виде байт-кода, скомпилирован, также может быть встроен в другие методы.

Структура известна по типу, поэтому вызовы методов можно правильно маршрутизировать.

...