Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/56: Рейтинг темы: голосов - 56, средняя оценка - 4.95
6 / 6 / 2
Регистрация: 02.08.2014
Сообщений: 119

Неуправляемый код и платформа .NET

12.11.2014, 12:16. Показов 11141. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Возникли следующие вопросы по неуправляемому коду и платформе .NET:

1)После компиляции файла с кодом на C#, получается файл с расширением .DLL или .EXE, который содержит инструкции на промежуточном языке (MSIL). Правильно ли я понял, что в эти файлы вставляется некоторая сигнатура, которая необходимо для указания того, что в файле IL-код? При попытке использования этих файлов, загружается библиотека mscoree.dll. Затем код, который был в исходном файле, подается на вход некоторому методу из этой библиотеки, в котором IL-код компилируется построчно с помощью JIT-компилятора. Все так или что-то напутал?


2) Неуправляемый код компилируется в MSIL или в машинный код? Обрабатывается ли неуправляемый код каким-либо образом CLR или же в выполнении такого кода CLR не участвует вообще?

3) В литературе пишут, что отличие управляемого и неуправляемого кода в том, что неуправляемый код не выполняется под управлением CLR. В чем проявляются эти отличия?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.11.2014, 12:16
Ответы с готовыми решениями:

Некорректная передача аргумента в неуправляемый код
Здравствуйте, форумчане. Планируется написание обертки над кодом из С++ в виде dll-библиотеки для дальнейшего использования в C#. Пока что...

Неуправляемый код. Обертка для библиотеки
Добрый день! Возникла задача написать обертку для неуправляемой библиотеки. Причем библиотека загружается динамически, т.е. через...

Освободить память из под bitmapа (неуправляемый код)
Режу bitmap на куски примерно таким кодом private static unsafe Bitmap CopyRegion( BitmapData sourceData, Rectangle region )...

24
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
12.11.2014, 17:01
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от pavel911 Посмотреть сообщение
При выполнении этого файла метод компилируется построчно или весь сразу?
При вызове метода JIT-компилятор компилирует его в машинный код (один раз). При следующих вызовах метод уже не компилируется, поскольку машинные команды этого метода сохранены в участке памяти. Почитайте Рихтера, он хорошо об этом рассказывает.
CLR via C#, страницы 30-31.
1
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
12.11.2014, 19:29
Цитата Сообщение от pavel911 Посмотреть сообщение
При выполнении этого файла метод компилируется построчно или весь сразу?
Не совсем построчно, а скорее блоками кода.
http://stackoverflow.com/a/5589649/3816620
What happens is when execution reaches a function or code block (like, an else clause of an if block) that has not yet been JIT compiled into native machine code, the JIT'r is invoked to compile that block of IL into native machine code. When that's done, program execution enters the freshly emitted machine code to execute it's program logic. If while executing that native machine code execution reaches a function call to a function that has not yet been compiled to machine code, the JIT'r is invoked to compile that function "just in time". And so on.

The JIT'r doesn't necessarily compile all the logic of a function body into machine code at once. If the function has if statements, the statement blocks of the if or else clauses may not be JIT compiled until execution actually passes through that block. Code paths that have not executed remain in IL form until they do execute.
Упрощённо можно сказать как "компилируется по мере выполнения кода". Есть участок IL кода, не переведённый в машинные команды, а выполнение кода привело к исполнению этого блока, то он компилируется.
"Блок", "участок" - это условные понятия для участков кода на IL неопределённого размера
1
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,236
12.11.2014, 19:39
Всегда думал что Jitter сразу все собирает. Оказывается получается такой "продвинутый интерпретатор", но все-таки компилятор.
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
12.11.2014, 19:54
Не могу сказать, достаточно ли корректный пример, но испробовал код с методом, который никогда не выполняется
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace ConsoleApplication
{
    public class Program
    {
        public void Orphan() {
            string inner = "Меня не видно!";
            Console.WriteLine(inner);
        }
 
        static void Main(string[] args) {
            Console.WriteLine("Hello, World!");
        }
    }
}
Метод Orphan() не вызывается и его нет в дизассемблированном коде:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
--- c:\Development\C#\ConsoleApplication\Program.cs ----------------------------
        static void Main(string[] args) {
 in          al,dx  
 push        edi  
 push        esi  
 push        ebx  
 sub         esp,30h  
 xor         ebx,ebx  
 mov         dword ptr [ebp-10h],ebx  
 mov         dword ptr [ebp-1Ch],ebx  
 mov         dword ptr [ebp-3Ch],ecx  
 cmp         dword ptr ds:[590B0Ch],0  
 je          002D2662  
 call        7143CA43  
 nop  
            Console.WriteLine("Hello, World!");
 mov         ecx,dword ptr ds:[29521D8h]  
 call        702579F8  
 nop  
        }
 nop  
 lea         esp,[ebp-0Ch]  
 pop         ebx  
 pop         esi  
 pop         edi  
 pop         ebp  
 ret
1
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
12.11.2014, 21:28
Цитата Сообщение от tezaurismosis Посмотреть сообщение
Не совсем построчно, а скорее блоками кода.
Там все намного сложнее, компиляция завязана на внутреннюю реализацию ссылочных типов. Но это тема скорее для довольно объемной статьи.

На пальцах: Ссылочный тип содержит в себе две структуры - таблицу методов и так называемый EEClass. Обе этих структуры содержит слабые ссылки на "заглушки", наткнувшись на которые CLR отправляет весь блок JIT-компилятору. Очень грубо - но смысл примерно такой.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.11.2014, 21:28

c++ неуправляемый код
Прошу ответить на пару вопросов: 1) Как в ms visual studio 2008 сделать с++ неуправляемым. 2) Можно ли из не управляемого кода...

Возможно ли в паскале вызывать неуправляемый код?
Возможно ли в паскале вызывать неуправляемый код? Ну типо ассемблерные вставочки или что-нибудь еще?

Неуправляемый код тоже компилируется в байтовый?
Кто знает, пожалуйста скажите :)

Как в WinForms использовать неуправляемый код?
Здравствуйте! Необходимо написать программу, которая бы показывала информацию о графическом адаптере и позволяла изменить настройки...

Платформа Microsoft.NET Framework
кто может помощь с этой ошибкой? Вот код ошибки: Подробная информация об использовании оперативной (JIT) отладки вместо данного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru