Управляемый код
Управляемый код - это то, что создают компиляторы Visual Basic .NET и C #. Он работает в среде CLR (Common Language Runtime), которая, помимо прочего, предлагает такие услуги, как сборка мусора, проверка типов во время выполнения и проверка ссылок. Итак, представьте себе: «Мой код управляется CLR».
Visual Basic и C # могут только создавать управляемый код, поэтому, если вы пишете приложение на одном из этих языков, вы пишете приложение, управляемое CLR. Если вы пишете приложение на Visual C ++ .NET, вы можете, если хотите, создавать управляемый код, но это необязательно.
Неуправляемый код
Неуправляемый код компилируется прямо в машинный код. Таким образом, по этому определению весь код, скомпилированный традиционными компиляторами C / C ++, является «неуправляемым кодом». Кроме того, поскольку он компилируется в машинный код, а не в промежуточный язык, он является непереносимым.
Нет свободного управления памятью или чего-либо еще, что обеспечивает CLR.
Поскольку вы не можете создавать неуправляемый код с помощью Visual Basic или C #, в Visual Studio весь неуправляемый код написан на C / C ++.
Смешивание двух
Поскольку Visual C ++ может быть скомпилирован в управляемый или неуправляемый код, можно смешивать их в одном приложении. Это стирает грань между ними и усложняет определение, но стоит упомянуть, просто чтобы вы знали, что у вас все еще могут быть утечки памяти, если, например, вы используете стороннюю библиотеку с некоторым плохо написанным неуправляемым кодом.
Вот пример, который я нашел по googling :
#using <mscorlib.dll>
using namespace System;
#include "stdio.h"
void ManagedFunction()
{
printf("Hello, I'm managed in this section\n");
}
#pragma unmanaged
UnmanagedFunction()
{
printf("Hello, I am unmanaged through the wonder of IJW!\n");
ManagedFunction();
}
#pragma managed
int main()
{
UnmanagedFunction();
return 0;
}