Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
8 / 8 / 1
Регистрация: 12.11.2012
Сообщений: 409
1

Обращение управляемого кода к неуправляемому

23.01.2017, 11:36. Показов 914. Ответов 3
Метки нет (Все метки)

1)Вопрос такой как идет обращение неупрвляемого кода к управляемому?Сборщик мусора может чистить код который преобразован из il-кода jit-компилятором в машинный код.Для работы с неуправляемым кодом используются что-то (как я понял) типо враперов которые обращаются к коду на написанному на другом языке,что запускает свою версию (если можно так выразититься) "clr" для другого языка.Я правильно понимаю?
2) Возьмём неуправляемы ресурс-подключения к базе данных.Если я правильно понимаю он неуправляемы -так как само подключения написано на другом языке?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.01.2017, 11:36
Ответы с готовыми решениями:

Взаимодействие управляемого и не управляемого кода
Есть проект Win32Project1 В Win32Project1 есть функция void Test() { MessageBox( 0,...

Быстродействие управляемого и неуправляемого кода
начал изучать небезопасный код,написал прогу в ней 2 функции одна с управляемым кодом вторая...

Безопасность управляемого кода .NET
Прочитал для меня шокирующие заявление в статье журнала argc & argv '...При этом, вам нужно...

C++ Связь управляемого кода с обычным
Всем добрый день. Пишу графическое приложение (редактор карт для игры) на DirectX9. Всей...

3
Администратор
Эксперт .NET
13374 / 10883 / 4480
Регистрация: 17.03.2014
Сообщений: 21,952
Записей в блоге: 1
23.01.2017, 13:08 2
Лучший ответ Сообщение было отмечено ts-alan как решение

Решение

ts-alan, когда код исполняется, то никакой разницы между управляемым и неуправляемым _кодом_ уже нет т.к. JIT-компилятор уже преобразовал IL код в машинный. То есть сам вызов кода это обычный jmp или call. Главная трудность заключается в передаче данных в обе стороны. Например, если управляемый метод хочет передать массив байтов в неуправляемый метод, то казалось бы нам достаточно передать указатель на массив и всё. На деле ситуация сложнее. Т.к. массив это ссылочный тип, то он хранится в куче и значит пока неуправляемый метод не закончил работу нужно а) не разрешать сборщику мусора удалять его и б) не разрешать сборщику мусора двигать его (в рамках дефрагментации кучи). Если мы передаем более сложные данные, то кроме этих действий могут выполнятся и другие которые обозначаются общим термином маршаллинг данных.

Цитата Сообщение от ts-alan Посмотреть сообщение
Сборщик мусора может чистить код который преобразован из il-кода jit-компилятором в машинный код.
Нет. Сборщик мусора занимается только данными в управляемой куче.

Цитата Сообщение от ts-alan Посмотреть сообщение
Для работы с неуправляемым кодом используются что-то (как я понял) типо враперов которые обращаются к коду на написанному на другом языке,что запускает свою версию (если можно так выразититься) "clr" для другого языка.Я правильно понимаю?
Что-то ты путаешь. CLR одна, никакой особой версии для разных языков, тем более неуправляемых, нет. Есть такое понятие как Runtime Callable Wrapper, но это относится только к взаимодействию с COM объектами.

Цитата Сообщение от ts-alan Посмотреть сообщение
Возьмём неуправляемы ресурс-подключения к базе данных.Если я правильно понимаю он неуправляемы -так как само подключения написано на другом языке?
Язык здесь ни при чем. Подключение к БД является неуправляемым ресурсом потому что за него отвечает (читай владеет или управляет) неуправляемый код.
1
8 / 8 / 1
Регистрация: 12.11.2012
Сообщений: 409
23.01.2017, 13:23  [ТС] 3
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Язык здесь ни при чем. Подключение к БД является неуправляемым ресурсом потому что за него отвечает (читай владеет или управляет) неуправляемый код.
ну вот это не сильно понял, неупрвляемый код формирется в основном на другом языке(вот почему clr его обработать не может),что мешает его написать на .net извеняюсь за тупость))
0
Администратор
Эксперт .NET
13374 / 10883 / 4480
Регистрация: 17.03.2014
Сообщений: 21,952
Записей в блоге: 1
23.01.2017, 14:28 4
Цитата Сообщение от ts-alan Посмотреть сообщение
неупрвляемый код формирется в основном на другом языке(вот почему clr его обработать не может)
Это не вопрос возможности, а разделения ответственности. CLR отвечает за управляемый код и данные. Всё остальное ее не касается. То есть она просто не занимается неуправляемым кодом, если все еще непонятно.

Цитата Сообщение от ts-alan Посмотреть сообщение
что мешает его написать на .net
Работа с БД означает работу с файлом на диске и/или с сетью. В .NET нет механизмов для низкуровневой работы с устройствами ввода/вывода. Поэтому нам приходится прибегать к помощи посредников написанных на неуправляемых языках. Под этим в первую очередь понимается ОС, но это может быть и другой код. В этом нет ничего страшного т.к. .NET изначально проектировалась как надстройка над неуправляемым кодом.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2017, 14:28

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Не могу вытащить string из управляемого кода
Здравствуйте! столкнулся с проблемой вытаскивания строки из c# в с++... есть код на c# ...

Компиляция смешанного (управляемого и неуправляемого) кода
Здрасти. Подсобите люди добрые, нужно скомпилировать смешанный код. По всей видимости компилятору...

Как передать параметры неуправляемому коду
Здравствуйте.У меня такая проблема,нужно дотянуться до сторонней программы (chdbfl.exe поставляется...

Обращение к документу из кода
Приветствую вас Вот например в коде Докум. Фирма. ЮрЛицо.ЮрАдрес Здесь все понятно,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.