کلاس های حافظه در زبان C++
کلاس های حافظه در زبان C++ محدوه و عمر یک متغیر یا تابع را مشخص می کند. در زبان برنامه نویسی C++، چهار نوع حافظه برای ذخیره سازی متغیرها وجود دارد.
انواع کلاس های حافظه در زبان C++
- auto
- register
- static
- extern
- mutable
کلاس حافظه auto
auto در زبان C++، به عنوان کلاس حافظه پیشفرض در نظر گرفته شده است. یعنی هر متغیری که نوع کلاس حافظه اش مشخص نشود، auto خواهد بود.
1 2 3 4 | { int mount; auto int month; } |
مثال فوق دو متغیر را در یک کلاس حافظه یکسان تعریف می کند. کلاس حافظه auto فقط در داخل محدوده ای که تعریف می شود، قابل دسترسی است.
کلاس حافظه register
کلاس حافظه register برای تعریف متغیرهای محلی استفاده می شود و به جای RAM در register ذخیره می شود.
1 2 3 | { register int miles; } |
کلاس حافظه register فقط برای متغیرهایی که نیاز به دسترسی سریع دارند (مانند شمارنده حلقه ها) استفاده می شود. توجه داشته باشید که در هنگام استفاده از کلاس حافظه register ممکن است اختصاص فضا ناموفق باشد.
کلاس حافظه static
متغیرهایی که در کلاس حافظه static تعریف شوند، تا پایان برنامه مقداری که آخرین بار به آن ها داده شده است را حفظ می کنند و خارج از محدوده ای که تعریف می شوند نیز قابل دسترسی هستند. زمانی که یک متغیر سراسری به صورت static تعریف شود، فقط در فایلی که اعلان شده است قابل دسترسی است.
مثال زیر عملکرد کلاس حافظه static را نشان می دهد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <iostream> // 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++ خروجی زیر بدست خواهد آمد:
1 2 3 4 5 6 7 8 9 10 | 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 را نشان می دهد:
محتوای فایل main.c
1 2 3 4 5 6 7 | #include <iostream> int count ; extern void write_extern(); main() { count = 5; write_extern(); } |
محتوای فایل support.c
1 2 3 4 5 | #include <iostream> extern int count; void write_extern(void) { std::cout << "Count is " << count << std::endl; } |
خط extern void write_extern(); در فایل main.c تابعی که در فایل support.c تعریف شده است را اعلان می کند و به کامپایل می گوید که همچنین تابعی وجود دارد.
خط extern int count; برای دسترسی به متغیر سراسری count که در فایل main.c تعریف شده است استفاده می شود.
این دو فایل به صورت زیر کامپایل می شوند:
1 | $gcc main.c support.c |
نتیجه کامپایل و اجرای کد بالا:
1 | count is 5 |
کلاس حافظه mutable
این کلاس حافظه در کلاس ها استفاده می شود. هنگامی که شما یک شیء از کلاس را به صورت const تعریف کنید، نمی توانید مقادیر اعضای آن را تغییر دهید. اما اگر عضوی از آن کلاس به صورت mutable تعریف شود، می توان در حال const هم مقدار آن را تغییر داد. در بخش های بعدی در مورد این کلاس حافظه بیشتر توضیح داده می شود.
هیچ نظری ثبت نشده است