Managed Code کد مدیریت شده و Unmanaged Code کد مدیریت نشده چیست؟

Managed Code کد مدیریت شده و Unmanaged Code کد مدیریت نشده چیست؟

در این پست به توضیح مختصری از Managaed Code و Unmanaged Code و Native Code خواهیم پرداخت. با فول کده همراه باشید.

photo_2016-11-29_20-44-01

Mnaged Code کد مدیریت شده چیست؟

کد مدیریت شده یعنی کدی که در زبان‌های برنامه‌نویسی سطح بالا نوشته می‌شه.

این کد در واقع به کد ماشین کامپایل نشده؛ و به یه کد میانی کامپایل شده؛ که در سی شارپ میشه .NET. این کد توسط برخی سرویس‌های ماشین اجرا میشه، و خوشبخاتانه از این رو، کل عملیات از جمله چیزهای خطرناک مثل مموری و تردها، داخل یه فریم ورک امن مدیریت میشه.

پس Managed Code چیزیه که Visual Basic .NET و سی شارپ و … اون رو ایجاد می‌کنند؛ و اون به جای ترجمه به زبان ماشین، به یه زبان میانی (IL) ترجمه میشه؛ پس نمیتونه به صورت مستقیم روی کامپیوتر اجرا بشه.

CLI داخل یک فایلی به اسم Assembly ،همراه متادیتایی که کلاس‌ها، متدها و ویژگی‌هارو (مثل الزامات امنیتی) تعریف می‌کنه، نگه‌داری میشه.

کد مدیریت شده روی CLR مخفف Common Language Runtime اجرا می‌شه؛ که زمان اجرا یک تنوع وسیعی از سرویس‌هارو به کد اجرایی شما ارائه میده.

نتیجه: این کد توسط Runtime ای مثل CLR اجرا میشه؛ برای مثال .NET

photo_2016-11-29_20-42-26

Unmanaged Code کد مدیریت نشده چیست؟

کد مدیریت نشده، مستقیم به کد ماشین کامپایل شده؛ و در نتیجه به‌طور مستقیم توسط سیستم عامل اجرا میشه. کد تولید شده مستقیم روی پردازشگر میزبان اجرا میشه؛ و پردازشگر، کد تولید شده توسط کامپایلر رو اجرا میکنه.

Unmanaged Code همیشه به یه معماری مشخصی کامپایل میشه؛ که باعث میشه تنها بتونه روی همون پلتفرم مورد نظر اجرا بشه. بنابراین اگه بخواین یه کدی رو روی معماری‌های مختلفی اجرا کنید. شما باید اون کد رو با اون معماری خاص خودش کامپایل مجدد کنید.

Unmanaged Code در قبل از Visual Studio .NET 2002 چیزی بود که در خروجی نهایی ساخته می‌شد. تو زبا‌ن‌هایی مثل سی و سی‌پلاس‌پلاس خروجیمون کد مدیریت نشده میشه.

فایل‌های اجرایی Unmangaed اساسا یه تصویر باینری، کد x86 به‌طور مستقیم به memory بارگزاری میشن. این رویکرد معمولا نتایج اجرای سریع کد رو داره؛ ولی در بیشتر موارد تشخیص و بهبود ارورها ممکنه مشکل و زمان‌بر باشه.

تخصیص حافظه (memory allocation)، نوع امن (type safety)، امنیت (security) و … نیاز به مراقبت  و اهمیت دادن از سمت برنامه‌نویس داره و Unmanaged Code ممکنه به سرریز بافر از مموری و لغو اشاره‌گر و … منجر شه.

همه‌ی کدهای کامپایل شده با روش‌های سنتی مثل C و C++ کد مدیریت نشده هستند. برای مثال: کامپوننت‌های COM، رابط‌های ActiveX و توابع API Win32.

photo_2016-11-29_20-39-37

Native Code کد نیتیو چیست؟

Native در زبان انگلیسی مادری، اصیل، بومی ترجمه می شه.
عبارت Native Code در دو زمینه استفاده می شه.

1- خیلی از مردم این کلمه رو یه مترادف برای Unmanaged Code میدونن (ولی با اون یکی نیست.)
کدی که با یه ابزار قدیمی ساخته میشه؛ یا توسط زبان‌هایی مثل c++ نوشته میشه و در زمان runtime اجرا نمیشه؛ ولی در عوض به صورت native در ماشین اجرا میشه. و ممکنه یه نرم افزار کامل باشه و یا یک کامپوننت COM یا dll باشه؛ که از داخل Managed Code فراخونی میشه؛ که از COM Interop یا PInvoke (دو ابزار قدرتمند برای استفاده از کدهای قدیمی در یک محیط جدید) برای فراخونی استفاده می کنه.
در اینجا کد مستقیما توسط CPU اجرا میشه؛ که این کار Performance برنامه رو به مقدار قابل توجهی افزایش میده (به خصوص در مباحث پرازش تصویر)
این کد از منابع سیستم استفاده کم‌تری داره و صد البته کاراتر هم هست.

2- برای توصیف و شرح خروجی کامپایلر JIT
کد ماشین در حقیقت در runtime اجرا میشه؛ ولی توسط CLI اجرا نمیشه و کد ماشینیه. در نتیجه فرض نکنیم که Native همون Unamaged Code هست.

همون قدر که مهارت شما تو کدنویسی Native میتونه باعث بالا رفتن سرعت برنامتون بشه، کم تجربگی و بی‌دقتی تو نوشتن کدهایی که مدیریت روشون انجام نمیشه می‌تونه باعث سقوط سرعت برنامتون بشه.

زبان‌هایی مثل C و C++ در واقع Native به حساب میان…

تو  اندروید که زبان اصلی اون Java هست، باید از Java Native Interface یا JNI استفاده کنیم.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

cp-codfk

نظرات ثبت شده بدون دیدگاه

توضیحات پیشنهادی نظرات اشتراک