کلاس های حافظه در زبان C
کلاس حافظه محدوه و عمر یک متغیر یا تابع را در طول اجرای برنامه مشخص می کند. در زبان برنامه نویسی C، چهار نوع حافظه ذخیره سازی وجود دارد که در زیر هر کدام را توضیح داده ایم.
انواع کلاس های حافظه در زبان C
- auto
- register
- static
- extern
کلاس حافظه 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 | #include <stdio.h> /* function declaration */ void func(void); static int count = 5; /* global variable */ main() { while(count--) { func(); } return 0; } /* function definition */ void func( void ) { static int i = 5; /* local static variable */ i++; printf("i is %d and count is %dn", i, count); } |
نتیجه کامپایل و اجرای کد بالا:
1 2 3 4 5 | i is 6 and count is 4 i is 7 and count is 3 i is 8 and count is 2 i is 9 and count is 1 i is 10 and count is 0 |
کلاس حافظه extern
کلاس ذخیره سازی extern برای ارجاع به یک متغیر جهانی که برای همه فایل های برنامه قابل مشاهده است استفاده می شود. با استفاده از extern، متغیر نمی تواند مقداردهی اولیه شود، اما نام متغیر را در یک مکان ذخیره سازی که قبلا تعریف شده است، نشان می دهد. کلاس حافظه extern برای دسترسی به متغیرهای سراسری که در فایل های مختلف یک پروژه تعریف شده اند، استفاده می شود. هنگام استفاده از extern نمی توانید به متغیر مقدار اولیه دهید و فقط آن را اعلان می کنید.
از کلاس حافظه extern اغلب در پروژه های بزرگ که از چندین فایل تشکیل می شوند استفاده می شود. مثال زیر به خوبی نحوه استفاده از کلاس حافظه extern را نشان می دهد:
محتوای فایل main.c
1 2 3 4 5 6 7 | #include <stdio.h> int count ; extern void write_extern(); main() { count = 5; write_extern(); } |
محتوای فایل support.c
1 2 3 4 5 | #include <stdio.h> extern int count; void write_extern(void) { printf("count is %dn", count); } |
خط extern void write_extern(); در فایل main.c تابعی که در فایل support.c تعریف شده است را اعلان می کند و به کامپایلر می گوید که همچنین تابعی وجود دارد. خط extern int count; برای دسترسی به متغیر سراسری count که در فایل main.c تعریف شده است استفاده می شود.
این دو فایل به صورت زیر کامپایل می شوند:
1 | $gcc main.c support.c |
نتیجه کامپایل و اجرای کد بالا:
1 | count is 5 |
هیچ نظری ثبت نشده است