ম্যানেজড কোড হল এমন কোড যার এক্সিকিউশন Common Language Runtime (CLR) দ্বারা পরিচালিত হয়। C#, F#, VB.NET ইত্যাদি .NET ল্যাঙ্গুয়েজে লিখা কোড ম্যানেজড কোড।
ম্যানেজড কোডের জীবনচক্র
- সোর্স কোড (C#) → Compiler (csc/roslyn) → IL (Intermediate Language)
- IL + Metadata → Assembly (.dll/.exe)
- Runtime: CLR লোড করে → JIT Compiler → Native Machine Code → এক্সিকিউশন
CLR-র سার্ভিসগুলো (Managed Code-কে যা মিলে)
| সার্ভিস | বিবরণ |
|---|---|
| Memory Management | গারবেজ কালেকশন (GC), অটোমেটিক মেমরি রিক্লেম |
| Type Safety | টাইপ চেকিং, বাউন্ড চেকিং, ইনভেলিড কাস্ট প্রতিরোধ |
| Exception Handling | স্ট্রাকচার্ড এক্সেপশন হ্যান্ডলিং (try/catch/finally) |
| Security | Code Access Security (CAS), স্যান্ডবক্সিং |
| Thread Management | থ্রেড পুল, সিঙ্ক্রোনাইজেশন, async/await |
| Interop | P/Invoke, COM Interop, unmanaged কোড কল |
Managed vs Unmanaged Code
| দিক | Managed (C#) | Unmanaged (C/C++) |
|---|---|---|
| কম্পাইলেশন | IL (Intermediate Language) | নেটিভ মেশিন কোড |
| মেমরি | GC-ম্যানেজড | ম্যানুয়াল (malloc/free) |
| টাইপ সেফটি | এনফোর্সড | প্রোগ্রামারের দায়িত্ব |
| পয়েন্টার | প্রতিবন্ধিত (unsafe ছাড়া) | পূর্ণ অ্যাক্সেস |
| প্ল্যাটফর্ম | ক্রস-প্ল্যাটফর্ম (IL) | প্ল্যাটফর্ম-স্পেসিফিক |
C#-এ Unsafe Context (Unmanaged কোড)
unsafe
{
int value = 100;
int* ptr = &value; // পয়েন্টার ব্যবহার
Console.WriteLine(*ptr); // 100
}
unsafe ব্লকে পয়েন্টার, স্ট্যাকঅ্যালোক (stackalloc), এবং আনম্যানেজড মেমরি অ্যাক্সেস সম্ভব। কম্পাইল করতে /unsafe ফ্ল্যাগ দরকার।
সারসংক্ষেপ
- ম্যানেজড কোড = CLR-র অধীন এক্সিকিউশন = সেফটি + প্রোডাক্টিভিটি
- অনম্যানেজড কোড = ডায়রেক্ট হার্ডওয়ার/ওএস অ্যাক্সেস = কন্ট্রোল + রিস্ক
- C# উভয় সাপোর্ট করে (unsafe দিয়ে)।