تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 8 از 8

نام تاپيک: کلاس های حافظه زبان C

  1. #1
    آخر فروم باز Dr.FANOOS's Avatar
    تاريخ عضويت
    Aug 2009
    پست ها
    1,056

    14 کلاس های حافظه زبان C

    همانطور که می دانید زبان C دارای 4 نوع کلاس های حافظه می باشد که عبارتند از :
    STATIC
    REGISTER
    EXTERN
    AUTO
    .................................................. ..
    از اساتید خواهشمندم اگر امکانش هست این 4 نوع حافظه رو به صورت کامل توضیح بدهند
    با تشکر

  2. #2
    حـــــرفـه ای sin2x=2sinxcosx's Avatar
    تاريخ عضويت
    Dec 2007
    پست ها
    2,234

    پيش فرض

    در واقع کلاس های حافظه C به دو بخش static و automatic تقسیم می شن که auto و register برا تعریف متغیرهای automatic و static و extern برا تعریف متغیرهای static هستن .
    متغیرهای اتوماتیک وقتی ایجاد می شن که برنامه وارد بلاکی بشه که این متغیرها تعریف شدن . با خروج از اون بلاک این متغیرها هم نابود می شن .
    متغیرهای محلی همان متغیرهای اتوماتیک هستن . شما معمولا همه متغیرهایی که تعریف می کنین auto هستن که این کلمه رو نمی نویسین . یعنی وقتی داخل حلقه for می نویسین int i = 0 . این همون auto int i = 0 هستش که auto به ندرت تایپ می شه .
    اگه قبل از اعلان متغیری از register استفاده بشه این باعث میشه که این متغیر داخل یکی از ثبات های سی پی یو قرار می گیره تا سرعت پردازش بالایی داشته باشه . از این کلاس حافظه اصلا استفاده نمی شه . چون کامپایلر خودش تشخیص می ده که چه متغیری نیاز هست تا داخل ثبات قرار بگیره و چی نیاز نیست . چون حافظه ثبات خیلی خیلی محدود هست .

    اما static .
    فرض کنین داخل یه تابع یه متغیر معرفی کردین که با مقدار 1 مقداردهی اولیه میشه و بعد داخل تابع عملیاتی روش انجام میشه و مقدارش تغییر پیدا می کنه .
    حالا هزار بارم ما این تابع رو فراخوانی کنیم همون اول مقدار 1 می گیره . حالا اگه بخوایم مقدار قبلیشو(یعنی مقداری که قبل از فراخوانی قبلی تو متغیر ذخیره شده ) نگه داره اونو در ابتدای تابع static اعلان می کنیم . متغیرهای static یک بار و فقط یک بار در ابتدا یعنی هنگام اعلان مقدار دهی می شن .

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

  3. 2 کاربر از sin2x=2sinxcosx بخاطر این مطلب مفید تشکر کرده اند


  4. #3
    آخر فروم باز Dr.FANOOS's Avatar
    تاريخ عضويت
    Aug 2009
    پست ها
    1,056

    پيش فرض

    خیلی ممنون از اطلاعات خوبی که ارائه کردید.
    اگر می شه کمی بیشتر مطلب رو توضیح بدهید!
    ممنون

  5. #4
    حـــــرفـه ای sin2x=2sinxcosx's Avatar
    تاريخ عضويت
    Dec 2007
    پست ها
    2,234

    پيش فرض

    خیلی ممنون از اطلاعات خوبی که ارائه کردید.
    اگر می شه کمی بیشتر مطلب رو توضیح بدهید!
    ممنون

    هر کجاش رو میگین من اونجا رو بیشتر توضیح بدم .

  6. این کاربر از sin2x=2sinxcosx بخاطر این مطلب مفید تشکر کرده است


  7. #5
    آخر فروم باز Dr.FANOOS's Avatar
    تاريخ عضويت
    Aug 2009
    پست ها
    1,056

    پيش فرض

    در واقع کلاس های حافظه C به دو بخش static و automatic تقسیم می شن که auto و register برا تعریف متغیرهای automatic و static و extern برا تعریف متغیرهای static هستن
    من متوجه نشدم الان به چند دسته تقسیم شد?
    auto با automatic فرق می کنه?
    اما static .
    فرض کنین داخل یه تابع یه متغیر معرفی کردین که با مقدار 1 مقداردهی اولیه میشه و بعد داخل تابع عملیاتی روش انجام میشه و مقدارش تغییر پیدا می کنه .
    حالا هزار بارم ما این تابع رو فراخوانی کنیم همون اول مقدار 1 می گیره . حالا اگه بخوایم مقدار قبلیشو(یعنی مقداری که قبل از فراخوانی قبلی تو متغیر ذخیره شده ) نگه داره اونو در ابتدای تابع static اعلان می کنیم . متغیرهای static یک بار و فقط یک بار در ابتدا یعنی هنگام اعلان مقدار دهی می شن .
    این رو هم به طور کل متوجه نشدم
    مابقی اطلاعات خیلی عالی بود.دست گل شما درد نکنه

    ---------- Post added at 11:01 AM ---------- Previous post was at 10:58 AM ----------

    تنها چیز مفیدی که تونستم توی نت پیدا کنم البته بعداز این انجمن
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

  8. #6
    حـــــرفـه ای sin2x=2sinxcosx's Avatar
    تاريخ عضويت
    Dec 2007
    پست ها
    2,234

    پيش فرض

    auto با automatic فرق می کنه?
    بله . auto یه کلمه کلیدی تو ++C هست که باهاش میشه متغیرهای اتوماتیک تعریف کرد ولی automatic نوع این کلاس حافظه هست . یعنی با auto میشه یه متغیر از نوع کلاس حافظه automatic تعریف کرد . اصلا این automatic رو بی خیال شین .


    این رو هم به طور کل متوجه نشدم
    کد زیر رو در نظر بگیرین :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    یه تابع foo داریم که توش یه متغیر از نوع static تعریف کردیم . این متغیر در ابتدا مقدار 4 می گیره . بعد یدونه بهش اضافه می شه و همونو برمیگردونیم که میشه 5 . بعد اونو تو تابع main تو متغیر c ذخیره می کنیم و چاپ می کنیم . که 5 چاپ میشه .
    حالا دوباره میایم تابع foo رو فراخوانی می کنیم . این بار دیگه دوباره مقدار 4 بهش اختصاص داده نمیشه . مقدار قبلی که تو آخرین فراخوانی توش مونده بود رو الان داره . یعنی 5 . حالا یدونه اضافه میشه که میشه 6 و 6 برگشت داده میشه .
    حالا تو main عدد 6 چاپ میشه . در حالی که اگه همون متغیر w رو تو تابع foo از نوع auto یا همون int خالی تعریف می کردیم هر دفعه مقدار 4 می گرفت و یدونه اضافه می شد و 5 چاپ می شد تا آخر .

  9. این کاربر از sin2x=2sinxcosx بخاطر این مطلب مفید تشکر کرده است


  10. #7
    آخر فروم باز alireza1411's Avatar
    تاريخ عضويت
    Jun 2010
    محل سكونت
    پای آن کاج بلند
    پست ها
    2,104

    پيش فرض

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

  11. #8
    حـــــرفـه ای sin2x=2sinxcosx's Avatar
    تاريخ عضويت
    Dec 2007
    پست ها
    2,234

    پيش فرض

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

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •