رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران

برنامه نویسی

  • مطالب
    5
  • دیدگاه‌ها
    2
  • باز‌دید‌ها
    907

شرکت کنندگان در این وبلاگ

فرق بین کامپایل استاتیک و داینامیک

کامبیز اسدزاده

181 بازدید

فرق بین کامپایل استاتیک و داینامیک

قبل از اینکه فرق بین ایستا (استاتیک) - Static و پویا (داینامیک) - Dynamic را بدانیم لازم است در رابطه با چرخه زندگی نوشتن یک برنامه و اجرای آن آشنا شویم. هر برنامه برای اولین بار توسط یک محیط توسعه (Editor) یا IDE توسط برنامه نویسان انتخاب و به صورت فایل متنی قابل ویرایش می باشد. سپس فایل متنی که شامل کد های نوشته شده توسط برنامه نویس تحت زبان برنامه نویسی مانند C، C++ و غیره... می باشد توسط کامپایلر به کد شیء ای تبدیل می شود که ماشین بتواند آن را درک کرده و اجرا کند.

برنامه ای که ما می نویسیم ممکن است به عنوان یک مورد توسط دیگر برنامه ها یا کتابخانه هایی از برنامه ها مورد استفاده قرار بگیرد برقراری ارتباط (پیوند کردن) یا همان لینک کردن پروسه ای است که برا اجرای موفقیت آمیز برنامه های نوشته شده ما بکار می رود برقراری ارتباط بین ایستا و پویا دو پروسه ای از جمع آوری و ترکیب فایل های شیئ های مختلفی است که به منظور ایجاد یک فایل اجرایی می باشند. در این بخش ما تصمیم بر این داریم تا تفاوت بین آن ها را با جزئیات مورد بررسی قرار دهیم.

عمل پیوند یا ترکیب در زمان کامپایل انجام شود، در واقع زمانی که کد منبع به زبان ماشین ترجمه می شود، در زمان بار گذاری، زمانی که برنامه در داخله حافظه بار گذاری می شود، و حتی زمان اجرای آن توسط برنامه صورت می گیرد این عمل زمان پیوند و یا ترکیب (اتصال) است. در نهایت این فرآیند توسط برنامه ای اجرا می شود که به آن لینکر - پیوند دهنده (ترکیب کننده) می گویند. اتصال دهنده ها به عنوان ویرایستار لینک نیز معرفی می شوند. لینک شدن (پیوند شدن) به آخرین مرحله از کامپایل می گویند.

در زبان علمی اصطلاح لینکر یا Linker معروف است اما در زبان فارسی بهترین گزینه مربوطه را میتوان با عنوان اتصال دهنده، پیوند دهنده، ترکیب کننده نام برد. همه آن ها نشانگر یک هدف به منظور ترکیب اشیاء با یکدیگر هستند که در مرحله کامپایل صورت می گیرد.

پس از ایجاد پیوند در برنامه، برای اجرای آن برنامه باید داخل حافظه منتقل شود. در انجام این کار باید آدرس هایی برای اجرای داده ها و دستور العمل ها اختصاص یابد.

به طور خلاصه روند زیر می تواند به عنوان چرخه زندگی یک برنامه خلاصه شود (نوشتن - لینک کردن - بارگذاری - اجرا)

فرق بین کامپایل استاتیک و داینامیک

program-life-cycle.png

در زیر تفاوت های عمده ارتباط بین استاتیک و داینامیک آورده شده است :

استاتیک 

  • ارتباط به روش استاتیک فرآیندی است که تمامی ماژول ها و کتابخانه های برنامه در فایل اجرایی نهایی کپی می شوند. این روش توسط لینکر در مرحله آخر کامپایل انجام می شود. اتصال دهنده - لینکر طبق روال ترکیبی کتابخانه ها را با کد برنامه و همراه مراجع - منابع خارجی ترکیب کرده و برای تولید یک بارگذاری مناسب در حافظه آماده سازی می کند. زمانی که برنامه بار گذاری می شود، سیستم عامل محلی را در حافظه به صورت یک فایل اجرایی که شامل کد های اجرایی و داده ها می باشد مشخص می کند.
  • ارتباط به شیوه استاتیک توسط برنامه ای با نام لینکر انجام می شود که در آخرین مرحله فرآیند کامپایل یک برنامه صورت می گیرد. لینکر ها نیز به عنوان ویرایشگر پیوند نیز عنوان می شوند.
  • فایل های استاتیک به طور قابل توجهی دارای اندازه بسیار بزرگی هستند زیرا برنامه های خارجی و کتابخانه های لینک شده همه در یک جا و در فایل نهایی اجرایی جمع آوری شده اند.
  • در اتصال استاتیک اگر هر یک از برنامه های خارجی تغییر کرده باشد باید آن ها دوباره کامپایل شوند و مجددا عمل اتصال صورت گیرد در غیر اینصورت هیچ تغییری در به روز رسانی های مرتبط با فایل اجرایی مشاهده نخواهد شد.
  • برنامه های استاتیکی زمان بارگذاری ثابتی در هر بار اجرای برنامه در حافظه را در نظر می گیرند. و زمانی که برای بارگذاری طول می کشد ثابت است.
  • برنامه هایی که از کتابخانه های استاتیکی استفاده می کنند معمولا سریعتر از برنامه هایی هستند که کتابخانه های آن ها به صورت پویا می باشد.
  • در برنامه های استاتیکی، تمامی کد ها شامل یک فایل اجرایی می باشند. بنابراین، آن ها هرگز در برنامه هایی که دارای مشکلاتی هستند اجرا نخواهند شد.

داینامیک

  • در ارتباط پویا نام کتابخانه های خارجی (کتابخانه های به اشتراک گذاری شده) در فایل اجرایی نهایی قرار داده شده اند نه خود کتابخانه. در حالی که ارتباط واقعی در زمان اجرا در هر دو فایل در حافظه قرار می گیرند. اتصال پویا این اجازه را می دهند تا برنامه های متعددی به صورت یک ماژول کپی شده و قابل اجرا مورد استفاده قرار بگیرد.
  • اتصال پویا بر خلاف اتصال استاتیک در زمان اجرا توسط سیستم عامل انجام می شود.
  • در اتصال پویا فقط یک نسخه از کتابخانه به اشتراک گذاری شده در حافظه نگه داری می شود. این به طور قابل توجهی اندازه برنامه های اجرایی را کاهش می دهد، در نتیجه صرفحه جویی در حافظه و فضای دیسک صورت خواهد گرفت.
  • در اتصال پویا بر خلاف اتصال استاتیک نیازی به کامپایل کامل پروژه نمی باشد در صورتی که لازم باشد تغییراتی در هر یک از فایل ها صورت بگیرد تنها کافی است آن را کامپایل و در کنار برنامه قرار دهید. این یکی از بزرگترین مزیت های کامپایل داینامیکی می باشد.
  • در اتصال پویا زمان بارگذاری برنامه در حافظه ممکن است کاهش یابد. این در صورتی است که کتابخانه های مشترک در حافظه بارگذاری شده اند.
  • برنامه هایی که از کتابخانه های مشترک استفاده می کنند معمولا کندتر از برنامه هایی هستند که از کتابخانه های استاتیکی استفاده می کنند.
  • برنامه های پویا وابسته به داشتن کتابخانه های سازگار هستند. اگر کتابخانه تغییر یابد (برای مثال، یک کامپایلر جدید منتشر شود ممکن است کتابخانه را تغییر دهد)، در این صورت ممکن است برنامه مجدداً تحت کتابخانه جدید باز نویسی و به روز رسانی شوند. اگر کتابخانه از روی سیستم حذف شود، برنامه ای که وابسته آن کتابخانه می باشد دیگر کار نخواهد کرد.

  • تشکر شده 1


0 دیدگاه


نظرهای پیشنهاد شده

هیچ دیدگاهی برای نمایش وجود دارد.

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری
  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×