ورود

نسخه کامل مشاهده نسخه کامل : کلاس های حافظه زبان C



Dr.FANOOS
19-10-2010, 23:24
همانطور که می دانید زبان C دارای 4 نوع کلاس های حافظه می باشد که عبارتند از :
STATIC
REGISTER
EXTERN
AUTO
.................................................. ..
از اساتید خواهشمندم اگر امکانش هست این 4 نوع حافظه رو به صورت کامل توضیح بدهند:46:
با تشکر:11:

sin2x=2sinxcosx
20-10-2010, 12:55
در واقع کلاس های حافظه 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 هم برای اعلام متغیرهای سراسری و متغیرهایی که قراره تو چند فایل استفاده بشه استفاده میشه .

Dr.FANOOS
23-10-2010, 01:43
خیلی ممنون از اطلاعات خوبی که ارائه کردید.
اگر می شه کمی بیشتر مطلب رو توضیح بدهید!:46:
ممنون:11:

sin2x=2sinxcosx
24-10-2010, 00:30
خیلی ممنون از اطلاعات خوبی که ارائه کردید.
اگر می شه کمی بیشتر مطلب رو توضیح بدهید!:46:
ممنون:11:


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

Dr.FANOOS
24-10-2010, 11:01
در واقع کلاس های حافظه C به دو بخش static و automatic تقسیم می شن که auto و register برا تعریف متغیرهای automatic و static و extern برا تعریف متغیرهای static هستن
من متوجه نشدم الان به چند دسته تقسیم شد?:31:
auto با automatic فرق می کنه?

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

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

تنها چیز مفیدی که تونستم توی نت پیدا کنم البته بعداز این انجمن:31:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

sin2x=2sinxcosx
24-10-2010, 20:12
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 چاپ می شد تا آخر .

alireza1411
30-10-2010, 01:28
توی کتاب برنامه نویسی شی گرا به ترجمه یا تالیف(دقیق یادم نمیاد) ابراهیم زاده ی قلزم هم توضیحات خوبی در این مورد داده شده.

sin2x=2sinxcosx
31-10-2010, 00:28
توی کتاب برنامه نویسی شی گرا به ترجمه یا تالیف(دقیق یادم نمیاد) ابراهیم زاده ی قلزم هم توضیحات خوبی در این مورد داده شده.

ترجمه از کتاب دیتل هستش .