تعلم فئات الذاكرة C ++ || تعلم c++ خطوة بخطوة

 

تحدد فئة الذاكرة نطاق المتغير في برنامج (scope) وعمر المتغيرات أو الوظائف ( Life Time) في برنامج C ++.

لذلك مع الأوصاف المذكورة أعلاه ، ستدرك أنه من الآن فصاعدًا يمكنك كتابة برنامج لا يشغل مساحة كبيرة من الذاكرة أولاً ويستخدم موارد ذاكرة الكمبيوتر على النحو الأمثل وثانيًا لديه سرعة تنفيذ أعلى وثالثًا البرنامج به أخطاء أقل وأسرع في استكشاف الأخطاء وإصلاحها. 

هناك 5 أنواع من فئات الذاكرة في C ++. يمكن استخدام فئات الذاكرة التالية في تطبيق C ++.

auto

register

static

extern

mutable


فئة الذاكرة التلقائية The auto Storage Class

إن auto هي فئة ذاكرة افتراضية لجميع المتغيرات المحلية، وإذا لم يتم تحديد نوع فئة الذاكرة، فسيتم اعتبار auto لها.


تسجيل فئة الذاكرة The register Storage Class

تُستخدم فئة ذاكرة  register أو التسجيل لتحديد المتغيرات المحلية التي يجب تخزينها في السجلات أو سجلات وCPU  بدلاً من RAM. لذلك، فإن سرعة العمليات معهم عالية جدًا، ونتيجة لذلك فهي تزيد من سرعة تنفيذ البرنامج، ولكنها أيضًا تخلق قيودًا، بعضها مذكور بإيجاز أدناه.


المحددات

كما ذكرنا، يتم وضع متغير نوع الاستقرار في أحد سجلات CPU إن أمكن. لذلك ، نظرًا لقلة عدد مسجلات وCPU، يمكن تضمين عدد محدود من المتغيرات في السجلات. لذلك إذا كان عدد المتغيرات المحددة كنوع من فئة ذاكرة الاستقرار كبيرًا، يقوم المترجم بإزالة فئة ذاكرة الاستقرار من المتغيرات.

لا يمكن استخدام الكلمة الأساسية register إلا للمتغيرات المحلية بالإضافة إلى معلمات الوظيفة.

تختلف أنواع المتغيرات التي يمكن أن تحتوي على فئة ذاكرة ثابتة من كمبيوتر إلى آخر. هذا لأن المتغيرات المختلفة لها وحدات بايت مختلفة.

العنوان لا معنى له بمعنى فئة ذاكرة الاستقرار. لأن المتغيرات موجودة في سجلات CPU وليس في RAM. لذلك في حالة فئة الذاكرة هذه، لا يمكن استخدام عامل التشغيل & للإشارة إلى عنوان المتغيرات.

{
register int miles;
}
C++


يجب استخدام  register فقط للمتغيرات التي تحتاج إلى وصول سريع ، مثل العدادات. وتجدر الإشارة إلى أن تعريف register لا يعني أنه سيتم تخزين المتغير في  register. بدلاً من ذلك، فهذا يعني أنه قد يتم تخزينه في  register بسبب قيود الأجهزة والتنفيذ.


فئة الذاكرة الثابتة The static Storage Class


تخبر فئة الذاكرة الثابتة المترجم بالحفاظ على متغير محلي خلال البرنامج ، بدلاً من إنشاء متغير محلي وحذفه في كل مرة يدخل فيها النطاق ويغادره. لذلك، فإن إنشاء المتغيرات المحلية بشكل ثابت يسمح لها بالاحتفاظ بقيمتها خلال استدعاءات الوظائف.


يمكن تطبيق  static modifier  على المتغيرات العامة. بمجرد القيام بذلك، يتم تقييد scope المتغير الذي تم الإعلان عنه فيه.


في C ++، عند استخدام static في عضو في الفصل، يمكن مشاركة نسخة واحدة فقط من هذا العضو بين الكائنات في الفئات الأخرى.


#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 ++

عندما يتم تجميع التعليمات البرمجية أعلاه وتنفيذها ، سيتم عرض النتيجة التالية:

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

فئة الذاكرة الخارجية The extern Storage Class

يتم استخدام فئة الذاكرة الخارجية للإشارة إلى متغير عام يكون مرئيًا لجميع ملفات البرنامج. أحيانًا يكون البرنامج الذي نكتبه طويلًا جدًا بحيث يكون من الأفضل تقسيم البرنامج إلى وحدات أصغر. إذا أردنا استخدام المتغيرات المحددة في الوحدة الرئيسية في الوحدات الفرعية ولم نعد نعيد تعريفها في الوحدات الفرعية ، فيمكننا تحديد المتغيرات باستخدام فئة الذاكرة الخارجية. إذا كنت تستخدم extern ، فلا يمكنك تهيئة المتغير، ولكن يمكنك تخزين اسمه في مكان واحد. يمكنك فقط التصريح عنه عند استخدام خارجي. تُستخدم فئة الذاكرة هذه بشكل شائع في المشاريع الكبيرة التي تحتوي على ملفات متعددة. يوضح المثال التالي بشكل كامل كيفية استخدام فئة الذاكرة الخارجية.

عندما يكون لديك ملفات متعددة وتحدد متغيرًا عامًا أو دالة تستخدم في ملفات أخرى ، يتم استخدام extern في ملف آخر للإشارة إلى المتغير أو الوظيفة المحددة. لفهم مكان استخدام extern ، فقط اعلم أنه يتم استخدامه للإعلان عن متغير عام أو وظيفة في ملف آخر.

غالبًا ما يتم استخدام extern modifier عندما يشترك ملفان أو أكثر في نفس المتغيرات أو الوظائف العامة ، كما هو موضح أدناه.


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

#include <iostream>
int count ;
extern void write_extern();

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

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

#include <iostream>

extern int count;

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

هنا، يتم استخدام الكلمة الأساسية الخارجية للإعلان عن عدد في ملف آخر. الآن قم بتجميع هذين الملفين على النحو التالي.

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

حاول كتابة البرنامج بشكل صحيح وتحقق من النتيجة كما يلي:

$./write
5

فئة الذاكرة المتغيرة The mutable Storage Class


تعمل mutable فقط على class members، والتي سيتم شرحها لاحقًا في هذا البرنامج التعليمي. بمجرد تحديد const، لم يعد بإمكانك تغيير قيم أعضائه. ولكن إذا قمت بتعريف عضو من هذه الفئة قابل للتغيير، فيمكنك تغيير قيمه حتى أثناء تحديده const. سنشرح المزيد عن هذا النوع من فئة الذاكرة في الدروس القادمة.



كلمات مفتاحية: