Mã được quản lý
Mã được quản lý là những gì trình biên dịch Visual Basic .NET và C # tạo ra. Nó chạy trên CLR (Thời gian chạy ngôn ngữ chung), trong số những thứ khác, cung cấp các dịch vụ như thu gom rác, kiểm tra loại thời gian chạy và kiểm tra tham chiếu. Vì vậy, hãy nghĩ về nó như là "Mã của tôi được quản lý bởi CLR."
Visual Basic và C # chỉ có thể tạo mã được quản lý, vì vậy, nếu bạn đang viết một ứng dụng bằng một trong những ngôn ngữ bạn đang viết một ứng dụng do CLR quản lý. Nếu bạn đang viết một ứng dụng trong Visual C ++ .NET, bạn có thể tạo mã được quản lý nếu bạn muốn, nhưng đó là tùy chọn.
Mã không được quản lý
Mã không được quản lý biên dịch thẳng vào mã máy. Vì vậy, theo định nghĩa đó, tất cả mã được biên dịch bởi trình biên dịch C / C ++ truyền thống là 'mã không được quản lý'. Ngoài ra, vì nó biên dịch thành mã máy và không phải là ngôn ngữ trung gian nên nó không thể mang theo được.
Không có quản lý bộ nhớ miễn phí hoặc bất cứ điều gì khác mà CLR cung cấp.
Vì bạn không thể tạo mã không được quản lý bằng Visual Basic hoặc C #, trong Visual Studio, tất cả mã không được quản lý được viết bằng C / C ++.
Trộn hai
Vì Visual C ++ có thể được biên dịch thành mã được quản lý hoặc không được quản lý, nên có thể trộn cả hai trong cùng một ứng dụng. Điều này làm mờ ranh giới giữa hai và làm phức tạp định nghĩa, nhưng điều đáng nói là chỉ để bạn biết rằng bạn vẫn có thể bị rò rỉ bộ nhớ nếu, ví dụ, bạn đang sử dụng thư viện bên thứ ba với một số mã không được quản lý bằng văn bản.
Đây là một ví dụ tôi tìm thấy bởi 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;
}