موضوع مقاله: کلاس‌های حافظه در C | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # کلاس‌های حافظه در C | مقدمه: اگر شما به زبان‌های C یا C++ برنامه نوشته باشید، به احتمال زیاد به مفهوم کلاس‌های حافظه برخورد کرده اید . | ## بخش 1: کلاس‌های حافظه در C | و اگر شما از این مفهوم بی‌اطلاع هستید یا اطلاعات کمی دارید، توصیه می‌کنیم که این مقاله را مطالعه کنید . برای تعیین نوع کلاس حافظه برای متغیرها باید به صورت زیر عمل کرد : <کلاس حافظه> <نوع متغیر> <اسامی متغیر> ; که نوع کلاس حافظه با استفاده از کلمات کلیدی auto ( برای کلاس حافظه اتوماتیک) ، static ( برای کلاس حافظه استاتیک ) ، register ( برای کلاس حافظه ثبات ) و extern ( برای کلاس حافظه خارجی ) تعیین می‌گردد . به عنوان مثال در کد زیر دو متغیر a و b ( با مقدار دهی اولیه 10 برای b )، از نوع عدد صحیح تعریف شده اند که کلاس حافظه آن‌ها static می‌باشد . اگر نوع کلاس حافظه متغیری را ذکر نکنیم، کامپایلر خود به خود auto در نظر می‌گیرد .این نوع متغیرها دارای خواص زیر هستند : به صورت محلی ( Local ) هستند . هنگام ورود یک متغیر به یک تابع یا بلاک، به آن حافظه اختصاص داده می‌شود و این حافظه هنگام خروج از تابع یا بلاک، پس گرفته می‌شود . کلاس حافظه خارجی اگر برنامه‌هایی که می نویسیم، طولانی باشند، می‌توانیم آن را به قسمت‌های کوچکتری تقسیم کنیم که به هر قسمت آن واحد ( یا همان Unit ) گفته می‌شود . اگر بخواهیم که متغیرهایی را که در واحد اصلی تعریف شده اند را در واحدهای فرعی استفاده کنیم و دیگر آن‌ها را دوباره در واحدهای فرعی تعریف نکنیم، می‌توانیم متغیرهای مورد نظر را با استفاده از کلاس حافظه خارجی تعریف کنیم . | ## بخش 2: کلاس‌های حافظه در C | بدین منظور باید این متغیرها در واحد اصلی به صورت عمومی تعریف شده باشند و در واحد فرعی از کلمه کلیدی extern قبل از تعریف این متغیرها استفاده کنیم . طول عمر متغیرهایی که از کلاس حافظه extern هستند، از هنگام شروع برنامه تا پایان آن است و همچنین این متغیرها در سراسر برنامه قابل دسترسی هستند . طول عمر آن‌ها برابر با طول عمل بلاک می‌باشد کلاس حافظه استاتیک این کلاس را می‌توانیم به دو قسمت کلی تقسیم کنیم : • متغیرهای محلی کلاس حافظه استاتیک • متغیرهای عمومی کلاس حافظه استاتیک متغیرهای استاتیک محلی دارای خواص زیر هستند : فقط در همان تابعی که تعریف شده اند، قابل دسترسی اند . می‌توانند مقدار اولیه بگیرند و فقط یکبار ارزش دهی اولیه را قبول می‌کنند در هنگام خروج از ار تابع، مقادیر متغیرها، آخرین مقداری خواهد بود که در تابع به آن‌ها اختصاص یافته‌است و هنگام اجرای دوباره تابع، مقدار اولیه نمی‌گیرند . متتغیرهای استاتیک عمومی فقط در یک واحد از برنامه، از جایی که تعریف می‌شوند، به بعد قابل دسترسی اند . کلاس حافظه ثبات متغیرهای کلاس حافظه ثبات ( register ) در صورت امکان در یکی از ثبات‌های CPU قرار می‌گیرند؛ لذا سرعت انجام عملیات با آن‌ها بسیار بالاست و در نتیجه موجب افزایش سرعت اجرای برنامه می‌شود . ولی این کلاس دارای محدودیت‌های زیر است : همان طور که در بالا ذکر شد، متغیر از نوع ثبات در صورت امکان در یکی از ثبات‌های CPU قرار می‌گیرد . | ## بخش 3: کلاس‌های حافظه در C | زیرا به دلیل کم بودن تعداد ثبات‌های CPU، تعداد محدودی متغیر می‌توانند در ثبات‌ها قرار بگیرند. پس اگر تعداد متغیرهایی که از نوع کلاس حافظه ثبات تعریف شده اند زیاد باشند، کامپایلر کلاس حافظه ثبات را از متغیرها حذف می‌کند . انواع متغیر که می‌توانند دارای کلاس حافظه ثبات باشند، در کامپیوترهای مختلف، متفاوت است . دلیل این امر هم این است که متغیرهای مختلف، تعداد بایت متفاوتی را به خود اختصاص می‌دهند . آدرس در مفهوم کلاس حافظه ثبات بی معنی است و زیرا متغیرها در ثبات‌های CPU قرار می‌گیرند و نه در RAM . | ## جمع‌بندی | پس در مورد ان کلاس حافظه، نمی‌توان از عملگر & برای اشاره به آدرس متغیرها استفاده کرد .