تبلیغات

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 ،همراه متادیتایی که کلاس ها و متدها و ویژگی هارو (مثل الزامات امنیتی) تعریف می کنه، نگه داری می شه.

کد مدیریت شده روی 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 استفاده کنیم.

تبلیغات
0
کانال تلگرام فول کده
تبلیغات

درباره نویسنده

هادی اکبرزاده

[ مدیر فول کده ]

علاقه‌مند به اشتراک گذاری اطلاعات در هر زمینه‌ای / برنامه‌نویس

پاسخ دهید

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

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