یک کلاس حافظه محدوده حضور متغیر در برنامه (scope) و مدت حضور یا طول عمر متغیرها و یا توابع ( Life Time ) را در یک برنامه C++ تعیین می کند.

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


در زبان c++  5 نوع کلاس حافظه وجود دارد. کلاس های حافظه زیر را می‌توان در یک برنامه C++ استفاده کرد. 

  • auto یا خودکار
  • register یا ثبات
  • static یا ایستا
  • extern یا خارجی
  • mutable

کلاس حافظه auto

auto یک کلاس حافظه پیش فرض برای تمامی متغیر های محلی است و اگر نوع کلاس حافظه تعیین نشود، auto برای آن در نظر گرفته می شود.
 

{
   int mount;
   auto int month;
}

C++

Copy

مثال فوق دو متغیر را با یک کلاس حافظه یکسان تعریف می کند. کلاس حافظه auto فقط می تواند در داخل توابع، مانند متغیرهای محلی استفاده شود.

کلاس حافظه register

کلاس حافظه register یا ثبات برای تعریف متغیرهای محلی استفاده می‌شود که باید به جای RAM در register یا ثبات های CPU ذخیره می شوند. بنابراین سرعت انجام عملیات با آن‌ها بسیار بالاست و در نتیجه موجب افزایش سرعت اجرای برنامه می‌شود اما محدودیت هایی ر ا نیز ایجاد میکنندکه در زیر به برخی از آنها به اختصار اشاراه می کنیم.

محدودیت ها

  1. همان طور که اشاره شد، متغیر از نوع ثبات در صورت امکان در یکی از ثبات‌های CPU قرار می‌گیرد. بنابراین به دلیل کم بودن تعداد ثبات‌های CPU، تعداد محدودی متغیر می‌توانند در ثبات‌ها قرار بگیرند. پس اگر تعداد متغیرهایی که از نوع کلاس حافظه ثبات تعریف شده اند زیاد باشند، کامپایلر کلاس حافظه ثبات را از متغیرها حذف می‌کند .
  2. کلمه کلیدی register تنها می‌تواند برای متغیرهای محلی و همچنین پارامترهای تابع به کار گرفته شود .
  3. انواع متغیر که می‌توانند دارای کلاس حافظه ثبات باشند، در کامپیوترهای مختلف، متفاوت است . دلیل این امر هم این است که متغیرهای مختلف، تعداد بایت متفاوتی را به خود اختصاص می‌دهند.
  4. آدرس در مفهوم کلاس حافظه ثبات بی معنی است. زیرا متغیرها در ثبات‌های CPU قرار می‌گیرند و نه در RAM . پس در مورد آن کلاس حافظه، نمی‌توان از عملگر & برای اشاره به آدرس متغیرها استفاده کرد.
{
   register int  miles;
}

C++

Copy

 register باید تنها برای متغیرهایی که نیاز به دسترسی سریع مانند شمارنده ها دارند استفاده شود. لازم به ذکر است که تعریف register به این معنی نیست که متغیر در یک register ذخیره خواهد شد. بلکه به این معنی است که ممکن است با توجه به سخت افزار و محدودیت های پیاده سازی در یک register ذخیره شود.

کلاس حافظه static

کلاس حافظه static به کامپایلر می‌گوید تا به جای آنکه یک متغیر محلی را هر بار که وارد و خارج محدوده می شود ایجاد کند و از بین ببرد، در طول برنامه حفظ کند. بنابراین ساختن متغیرهای محلی  به صورت static اجازه می دهد تا ارزش خود را در تمام مدت فراخوانی های توابع حفظ کنند. 
 static modifier ممکن است بر روی متغیرهای سراسری اعمال شود. از زمانی که این کار انجام شود محدوده یا scope یک متغیر که در آن اعلان شده است محدود می شود.
 در C++ هنگامی که static در یکی از اعضای کلاس ها مورد استفاده قرار می گیرد تنها یک نسخه از آن عضو را می توان بین اشیاء دیگر کلاس ها به اشتراک گذاشت. 
 

#include 

// Function declaration
void func(void);

static int count = 10; /* Global variable */

main() {
   while(count--) {
      func();
   }

   return 0;
}

// Function definition
void func( void ) {
   static int i = 5; // local static variable
   i++;
   std::cout << "i is " << i ;
   std::cout << " and count is " << count << std::endl;
}

C++

Copy

وقتی کد بالا کامپایل و اجرا شود نتیجه زیر نشان داده خواهد شد 

i is 6 and count is 9
i is 7 and count is 8
i is 8 and count is 7
i is 9 and count is 6
i is 10 and count is 5
i is 11 and count is 4
i is 12 and count is 3
i is 13 and count is 2
i is 14 and count is 1
i is 15 and count is 0

کلاس حافظه  extern 

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

محتویات فایل main.c
 

#include 
int count ;
extern void write_extern();

main() {
   count = 5;
   write_extern();
}

C++

Copy

محتویات فایل support.cpp

#include 

extern int count;

void write_extern(void) {
   std::cout << "Count is " << count << std::endl;
}

C++

Copy

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

$g++ main.cpp support.cpp -o write

تلاش کنید تا به درستی برنامه را بنویسید و نتیجه را به صورت زیر بررسی کنید 
 

$./write
5

 کلاس حافظه mutable

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

 

از اینکه سایت برنامه نویسان را انتخاب کردید متشکریمبا تشکر از سایت ilikephp.

آموزش برنامه نویسی قسمت چهاردهم

آموزش برنامه نویسی قسمت سیزدهم

آموزش برنامه نویسی قسمت دوازدهم

آموزش برنامه نویسی قسمت یازدهم

آموزش برنامه نویسی قسمت دهم

آموزش برنامه نویسی قسمت نهم

آموزش برنامه نویسی قسمت هشتم

حافظه ,کلاس ,متغیر ,یک ,register ,استفاده ,کلاس حافظه ,در یک ,می شود ,حافظه ثبات ,است که

مشخصات

آخرین ارسال ها

آخرین جستجو ها


آینده تکنولوژی های پزشکی Sean's style یارا دانلود بانک لینک های دانلود فیلم ، دانلود سریال و دانلود آهنگ میباشد. دانلود رایگان مقاله12 Byron dehkadeh-download معلم تعهد تخصص تغییر narvanikan صفر و یک Andre's memory