Managed code là code chạy dưới sự quản lý của CLR (Common Language Runtime) — C#, F#, VB.NET biên dịch ra IL rồi CLR lo giúp: garbage collection, type safety, kiểm tra biên mảng, xử lý exception, JIT ra mã máy.
Unmanaged code chạy trực tiếp trên hệ điều hành, không có CLR: C/C++ tự cấp phát và giải phóng bộ nhớ (malloc/free, new/delete), không có GC. .NET gọi sang code này qua P/Invoke (Win32 API) hoặc COM interop.
Hệ quả cần nhớ:
- Bộ nhớ managed do GC theo dõi và thu hồi tự động.
- Tài nguyên unmanaged (file handle, socket, con trỏ native) GC không biết cách dọn → phải giải phóng tay qua IDisposable/Dispose hoặc finalizer.
Hình dung: managed code chạy trong "sân có trọng tài" (CLR lo an toàn và dọn dẹp); unmanaged code chạy ngoài sân, tự chịu trách nhiệm bộ nhớ.