الفبای معماری حافظه (قسمت سوم - نحوه‌ی اختصاص قسمت‌های مختلف در برنامه‌نویسی)

الفبای معماری حافظه (قسمت سوم - نحوه‌ی اختصاص قسمت‌های مختلف در برنامه‌نویسی)

الفبای معماری حافظه (قسمت سوم - نحوه‌ی اختصاص قسمت‌های مختلف در برنامه‌نویسی)
الفبای معماری حافظه (قسمت سوم - نحوه‌ی اختصاص قسمت‌های مختلف در برنامه‌نویسی)

قسمت دوم

خب تو این قسمت میخواهیم بررسی کنیم چطور میتونیم تو برنامه ای که مینویسیم مشخص کنیم که یه قسمت مدنظر ما تو کدوم یک از بخش های حافظه ذخیره بشه. کلمات کلیدی زبون C که میتونن برای رسیدن به این هدف بهمون کمک کنن اینا هستند:

  • Variable Types
  • Type Qualifiers
  • Type Modifiers
  • Storage Classes

اولین مورد از موارد فوق مشخص میکنه که نوع متغیری که میخوایم تعریف کنیم چیه. این قضیه به طور مستقیم روی حافظه ای که قراره این متغیر اشغال کنه تاثیر میذاره. انواع متغیر مثه char ,float ,int و … هرکدوم مقدار مشخصی از حافظه رو اشغال میکنند.

دومین مورد که ما معمولا با کلمه کلیدی const ازش استفاده میکنیم باعث میشه متغیر تعریف شده صرفا قابل خواندن باشه و نشه مقدارش رو تغییر داد. البته کلمه های کلیدی دیگه ای هم تو این دسته جا میگیرند. این متغیرها معمولا در Code segment حافظه و در زیربخش const. قرار میگیرن.

مورد سوم از موارد فوق اندازه و علامت دار یا بی علامت بودن متغیر رو مشخص میکنه. کلماتی از قبیل signed ,short ,long و … از این دست هستند.

آخرین مورد هم مدت زمان باقی موندن متغیر در حافظه و همین طور محدوده دسترسی به متغیر رو مشخص میکنه. چهار مورد مهم تو این دسته قرار میگیرن:

  1. Auto

این کلمه مشخص میکنه که این متغیر باید در قسمت stack حافظه ذخیره بشه و مقدار دهی براش صورت بگیره. متغیرهایی که Storage class براشون تعریف نمیشه به صورت پیش فرض از همین دسته در نظر گرفته میشن.

  1. Static

این کلمه میگه که متغیر تعریف شده باید در کل فرایند اجرای پروژه ثابت بمونه و نباید فضایی رو که توی حافظه اشغال کرده ازش گرفته شه به همین خاطر هم طبق توضیحات قبلی بسته به نوع مقدار دهی تو بخش bss یا data از Data segment حافظه ذخیره میشه. فرق مهمی که این نوع داده با داده های سراسری داره اینه که اگه این داده مثلا داخل یه تابع تعریف شه فقط از داخل همون تابع قابل دسترسی هستش و خارج اون نمیشه بهش دسترسی داشت (اگرچه حافظه ای رو که اشغال کرده پس نمیده!)

  1. Extern

از این کلمه هم در مواقعی استفاده میشه که یک متغیر سراسری رو بخوایم در فایلی غیر از فایلی که متغیر رو توش تعریف کردیم استفاده کنیم. یه جورایی میشه گفت مفهوم سراسری بودن یه متغیر رو گسترش میده.

  1. Register

این کلمه رو زمانی به کار میبریم که بخوایم داده ای رو به صورت مستقیم در رجیسترهای CPU ذخیره کنیم. بدیهی هستش که چون رجیسترها پرسرعت ترین منابع حافظه در میکروکنترلر ها هستند پس این کار قاعدتا سرعت اجرا رو افزایش خواهد داد ولی این موضوع مشکلاتی رو هم ایجاد میکنه. فرض کنید برای انجام یه عملیات تمام رجیسترهای CPU غیر یکی مشغول باشند و اون یه دونه رو هم شما به این طریق استفاده میکنید. چی میشه؟ اون عملیات به علت اینکه رجیستری برای استفاده نداره انجام نمیشه و اینطوری ممکنه برنامه Performance رو از دست بده. به همین خاطر هم معمولا تو برنامه نویسی ما این کار رو انجام نمیدیم و ترجیح میدیم اینطور بهینه سازی ها رو کامپایلر برامون انجام بده!

در تصویر زیر میتونید مثالی رو مشاهده کنید که از تمام مواردی که تا الان توضیح دادیم نمونه هایی رو داره. نامگذاری متغیرها به نحوی انجام شده که مشخص میکنه هر کردومشون تو کدوم قسمت از حافظه ذخیره میشن:

 

معماری حافظه

 

برچسب ها

حمایت از سعید حقیقی پور

خوشحال میشیم برای تداوم و کیفیت ما رو حمایت کنید.

0 نفر

پــــســنــدیـده انـد

توجه

سعید حقیقی پور
سعید حقیقی پور

تا حالا به این فکر کردین که تو یه سیستم کامپیوتری GPU چقدر کارآمد و مهمه ولی به اندازه CPU شناخته شده نیست.یه جورایی همون "مجهولون فی الارض معروفون فی السماء" که میگن! یه حسی بهم میگه کاش بتونم مثه GPU باشم :)

دیدگاه ها

3 دیدگاه

  • علی
    ۷ مهر ۱۳۹۹

    سلام
    پس volatile چی میشه؟
    اونم مگه کلاس ذخیره سازی نیس؟!

    • محمد رحیمی
      ۱۳ مهر ۱۳۹۹

      بله لطفا در مورد volatile هم توضیح بدید

  • رضا
    ۵ مهر ۱۳۹۹

    سلام و ممنون از توضیحاتتون
    در قسمت تعریف نوع چه فرقی بین ذخیره سازی متغیر های هم سایز وجود داره (مثلا بین uint_8 و char ) و اینکه مثلا در تابعی که خروجی 8 بیتی دارد از کدام نوع استفاده میکنیم و آیا به جای هم می توان به کار برد یا خیر؟ ممنون

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش

همه چیز درباره ریموت کنترل‌های هاپینگ

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 9 ماه پیش

آموزش قدم به قدم راه اندازی +NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 1 سال پیش

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 2 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک