اطلاعیه

Collapse
No announcement yet.

چرا خود کامپایلر حافظه را نام گذاری و بخش بندی نمی کند ؟

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    چرا خود کامپایلر حافظه را نام گذاری و بخش بندی نمی کند ؟

    چرا خود کامپایلر حافظه را نام گذاری و بخش بندی نمی کند و این کار باید توسط لینکر در دو قسمت جداگانه انجام شود ؟ ( ابتدا نام گذاری قسمت های حافظه و سپس تخصیص و بخش بندی قسمت ها برای کاربردها مختلف همون ثوابت، دستورات، متغیرهای رم و ... )

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

    با این توضیح چه نیازی به لینکر است ؟

    اگر موضوعی را در انجمن مطرح کرده اید لطفا با استفاده از "موضوع به نتیجه رسید" بقیه را از این وضعیت مطلع فرمائید.

    #2
    پاسخ : چرا خود کامپایلر حافظه را نام گذاری و بخش بندی نمی کند ؟

    وظیفه کامپایلر، ساختن فایل های obj از برنامه های مختلف که به زبان c یا cpp یا اسمبلی نوشته شده است می باشد. یعنی برای هر برنامه یک فایل با فرمت obj ساخته می شود. اگر در یک برنامه از توابع موجود در فایل های دیگر استفاده شود، در ابتدای فایلی که توسط کامپایلر ساخته می شود نام آن توابع آورده می شود.
    حالا وظیفه لینکر است که این فایل های obj را با فایل های lib ترکیب کند و یک فایل با فرمت .out یا .exe یا .hex که قابل ریختن روی پردازنده است بسازد. در این مرحله است که لازم است تا حافظه نام گذاری و بخش بندی شود.
    مهم نیست که کجایی هستی، چه رنگی هستی، به چه زبونی حرف می زنی. مهم اینه که انسان باشی.
    http://baranelec.mihanblog.com/
    آینده ای خواهم ساخت که گذشته ام در برابرش زانو بزند...

    دیدگاه


      #3
      پاسخ : چرا خود کامپایلر حافظه را نام گذاری و بخش بندی نمی کند ؟

      نوشته اصلی توسط RasSharif
      چرا خود کامپایلر حافظه را نام گذاری و بخش بندی نمی کند و این کار باید توسط لینکر در دو قسمت جداگانه انجام شود ؟ ( ابتدا نام گذاری قسمت های حافظه و سپس تخصیص و بخش بندی قسمت ها برای کاربردها مختلف همون ثوابت، دستورات، متغیرهای رم و ... )

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

      با این توضیح چه نیازی به لینکر است ؟
      برای این که شما همه برنامه رو خودتون نمینویسید.
      یعنی این که مثلا فرض کنید دارید برای کامپیوتر برنامه نویسی میکنید. میاید از دستور printf استفاده میکنید. خب این رو که شما ننوشته اید. این رو یک عده دیگری اومده اند نوشته اند و توش گفتند که مثلا چطوری باید خروجی فرمت شده نمایش داده بشه. شما وقتی از این تابع تو برنامه تون استفاده میکنید کامپایلر فقط فراخوانی به این تابع رو مینویسه اما برای این که تابع واقعا در حین اجرا فرخوانی بشه باید لینکر اون تابع رو به برنامه شما لینک کنه تا حین اجرا تایع فراخوانده بشه.

      دیدگاه

      لطفا صبر کنید...