Native vs. Managed

,در اين پست سعي کردم که يک نگاه کلي به کد هاي Native و Managed بوجود بيارم. براي اطلاعات بيشتر و دقيق تر مي تونيد به منابعي در آخر پست ذکر شده مراجعه کنيد.


Managed
کد Managed به کدي که کامپايلر دات نت توليد مي کند گفته مي شود. وقتي شما يک برنامه را در دات نت کامپايل مي کنيد، اين کد به Intermediate Language  تبديل مي شود. IL کد بين زبان سطح بالا مثل #C و کد زبان ماشين است. IL در فايل هاي assembly ذخيره مي شود، که به تنهايي قابليت اجرا ندارند. Common Language Runtime وظيفه اجراي اسمبلي ها را به عهده دارد. يعني اسمبلي در CLR اجرا ميشود. بعد از اين که CLR ، صحت IL را تاييد کرد، Just In Time  را فراخواني مي کند تا کد IL را به کد ماشين تبديل کند.
وقتي CLR اسمبلي را اجرا مي کند سرويس هاي مختلفي را براي آن در نظر مي گيرد، مانند: امنيت ، مديريت حافظه و رم و ...
وجود CLR اين امکان را ميدهد که کد IL بر روي هر سيستم عاملي که داراي CLR است به اجرا درآيد.


زبان هايي مثل  C#، VB.Net، C++.Net کد هاي Managed توليد مي کنند.
جاوا نيز يکي ديگر از زبان هايي است که Managed هستند. در اين زبان bytecode ها توسط  Java Virtual Machine  اجرا مي شوند.

مزايا و معايب:
مزايا:
    Portable – runs on any platform with a CLR
    Easier to write
معايب
    Can run slower
    May require more system resources
Native
کد هاي Native برخلاف کد هاي Managed به کد ماشين تبديل ميشوند و توسط پردازنده اجرا ميشوند و نيازي به Runtime براي اجرا ندارند.
وقتي به شيوه Native کد نويسي مي کنيد، بعضي از قابليت هايي که Managed ارائه ميدهد را از دست مي دهيد، مانند مديريت حافظه. به عنوان مثال بعد از اينکه يک Object  را در برنامه بوجود آورديد، بايد آن را Free کنيد، که اين عمل در دات نت به وسيله Garbage Collection انجام مي شود.
يکي از معايب ديگري که کد Native نسبت به Managed داراست، مسئله اجرا در Platform هاي مختلف است. به عنوان مثال وقتي شما برنامه را در ويندوز کامپايل مي کنيد ، کد توليد شده (EXE)  فقط در ويندوز اجرا خواهد شد.
البته اين بدان معني نيست که شما با کد Native نميتوانيد Cross-Platform برنامه بنويسيد. هم اکنون فريم ورک هايي وجود دارند که وقتي شما کد را مينويسيد، کد شما را به API سيستم عامل هاي ديگر تبديل مي کنند.


زبان هايي مثل ++C  و Delphi کد هاي Native  توليد مي کنند.
مزايا و معايب
مزايا:
    Fast performance
    Smallest footprint

معايب
    More complex to write
    Dependent on specific platform
managed data
Managed Data داده هايي هستند که توسط GarbageCollection  مديريت مي شوند.
وقتي شما با #C که کد Managed توليد مي کند برنامه نويسي مي کنيد، مصرف حافظه براي داده ها به وسيله  GarbageCollection   مديريت مي شوند. اما وقتي شما با  ++C در دات نت برنامه نويسي مي کنيد، دات نت اين اختيار را به شما مي دهد که حافظه را CLR با GarbageCollection   مديريت کند يا خود شما مديريت حافظه را در دست بگيريد. در حالت پيش فرض مديريت حافظه به عهده شماست و براي اينکه مديريت را به دات نت بسپريد ، بايد از کلمه کليدي gc__ استفاده کنيد. براي درک بهتر به مثال زير توجه کنيد:

Unmanaged Data
class Ta
{
 private:
 int a;
}

Managed Data
__gc class Ta
{
 private:
 int a;
}
منابعي که براي اطلاعات بيشتر مي توانيد به آن ها مراجعه کنيد:


جستجو