یک کلاس حافظه محدوده حضور متغیر در برنامه (scope) و مدت حضور یا طول عمر متغیرها و یا توابع ( Life Time ) را در یک برنامه C++ تعیین می کند.
پس با توصیفات بالا متوجه میشوید که از این پس میتوانید برنامه ای بنویسید که اولا حافظه زیادی اشغال نکند و از منابع حافظه کامپیوتر به صورت بهینه استفاده کند و دوما سرعت اجرای بالاتری داشته باشند و سوما برنامه دارای خطای کمتر و عیب یابی سریع تری نیز میشود.
در زبان c++ 5 نوع کلاس حافظه وجود دارد. کلاس های حافظه زیر را میتوان در یک برنامه C++ استفاده کرد.
auto یک کلاس حافظه پیش فرض برای تمامی متغیر های محلی است و اگر نوع کلاس حافظه تعیین نشود، auto برای آن در نظر گرفته می شود.
{ int mount; auto int month; }
C++
Copy
مثال فوق دو متغیر را با یک کلاس حافظه یکسان تعریف می کند. کلاس حافظه auto فقط می تواند در داخل توابع، مانند متغیرهای محلی استفاده شود.
کلاس حافظه register یا ثبات برای تعریف متغیرهای محلی استفاده میشود که باید به جای RAM در register یا ثبات های CPU ذخیره می شوند. بنابراین سرعت انجام عملیات با آنها بسیار بالاست و در نتیجه موجب افزایش سرعت اجرای برنامه میشود اما محدودیت هایی ر ا نیز ایجاد میکنندکه در زیر به برخی از آنها به اختصار اشاراه می کنیم.
{ register int miles; }
C++
Copy
register باید تنها برای متغیرهایی که نیاز به دسترسی سریع مانند شمارنده ها دارند استفاده شود. لازم به ذکر است که تعریف register به این معنی نیست که متغیر در یک register ذخیره خواهد شد. بلکه به این معنی است که ممکن است با توجه به سخت افزار و محدودیت های پیاده سازی در یک register ذخیره شود.
کلاس حافظه 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 modifier اغلب زمانی مورد استفاده قرار می گیرد که دو یا چند فایل متغیرهای سراسری و یا توابع یکسانی را اشتراک بگذارند که در زیر توضیح داده شده است.
#includeint count ; extern void write_extern(); main() { count = 5; write_extern(); }
C++
Copy
#includeextern 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 تنها بر روی اعضای کلاس که بعدها در ادامه این آموزش ها توضیح داده خواهد شد اجرا می شود. پس از آن که یک شی را const تعریف می کنید، دیگر نمی توانید مقادیر اعضای آن را تغییر دهید. اما اگر عضوی از این کلاس را mutable تعریف کنید، می توانید حتی در حالیکه آن را const تعریف کرده اید، مقادیر آن را تغییر دهید. در جلسات بعدی بیشتر در مورد این نوع کلاس حافظه توضیح خواهیم داد.
از اینکه سایت برنامه نویسان را انتخاب کردید متشکریمبا تشکر از سایت ilikephp.
آموزش برنامه نویسی قسمت چهاردهم
آموزش برنامه نویسی قسمت سیزدهم
آموزش برنامه نویسی قسمت دوازدهم
حافظه ,کلاس ,متغیر ,یک ,register ,استفاده ,کلاس حافظه ,در یک ,می شود ,حافظه ثبات ,است که
درباره این سایت