المكدس مقابل ذاكرة الكومة – الفرق بينهما
الفرق الرئيسي بين ذاكرة المكدس وذاكرة الكومة
- المكدس هو بنية بيانات خطية في حين أن الكومة هي بنية بيانات هرمية.
- لن يتم تجزئة ذاكرة المكدس مطلقًا بينما يمكن أن تصبح ذاكرة الكومة مجزأة حيث يتم تخصيص كتل من الذاكرة أولاً ثم تحريرها.
- يصل Stack إلى المتغيرات المحلية فقط بينما يسمح لك Heap بالوصول إلى المتغيرات على مستوى العالم.
- لا يمكن تغيير حجم متغيرات المكدس بينما يمكن تغيير حجم متغيرات الكومة.
- يتم تخصيص ذاكرة المكدس في كتلة متجاورة بينما يتم تخصيص ذاكرة الكومة بأي ترتيب عشوائي.
- لا يتطلب المكدس إلغاء تخصيص المتغيرات بينما يلزم إلغاء تخصيص الكومة.
- يتم تخصيص المكدس وإلغاء التخصيص من خلال تعليمات المترجم بينما يتم تخصيص الكومة وإلغاء التخصيص بواسطة المبرمج.
ما هو المكدس؟
المكدس عبارة عن منطقة خاصة من ذاكرة الكمبيوتر تقوم بتخزين المتغيرات المؤقتة التي تم إنشاؤها بواسطة وظيفة. في المكدس، يتم الإعلان عن المتغيرات وتخزينها وتهيئتها أثناء وقت التشغيل.
إنها ذاكرة تخزين مؤقتة. عند اكتمال مهمة الحوسبة، سيتم مسح ذاكرة المتغير تلقائيًا. يحتوي قسم المكدس في الغالب على أساليب ومتغير محلي ومتغيرات مرجعية.
ما هو الكومة؟
الكومة هي ذاكرة تستخدمها لغات البرمجة لتخزين المتغيرات العامة. بشكل افتراضي، يتم تخزين كافة المتغيرات العامة في مساحة ذاكرة الكومة. وهو يدعم تخصيص الذاكرة الديناميكية.
لا تتم إدارة الكومة تلقائيًا نيابةً عنك ولا تتم إدارتها بإحكام بواسطة وحدة المعالجة المركزية. إنها أشبه بمنطقة حرة عائمة من الذاكرة.
الاختلافات الرئيسية بين المكدس والكومة
| معامل | كومة | كومة |
|---|---|---|
| نوع هياكل البيانات | المكدس عبارة عن بنية بيانات خطية. | الكومة عبارة عن بنية بيانات هرمية. |
| سرعة الوصول | وصول عالي السرعة | أبطأ مقارنة بالمكدس |
| إدارة الفضاء | تتم إدارة المساحة بكفاءة بواسطة نظام التشغيل حتى لا تصبح الذاكرة مجزأة أبدًا. | مساحة الكومة لا تستخدم بكفاءة. يمكن أن تصبح الذاكرة مجزأة عندما يتم تخصيص كتل من الذاكرة أولاً ثم تحريرها. |
| استخدم | المتغيرات المحلية فقط | يسمح لك بالوصول إلى المتغيرات على مستوى العالم. |
| الحد من حجم المساحة | يعتمد الحد على حجم المكدس على نظام التشغيل. | لا يوجد حد محدد لحجم الذاكرة. |
| تغيير حجم | لا يمكن تغيير حجم المتغيرات | يمكن تغيير حجم المتغيرات. |
| تخصيص الذاكرة | يتم تخصيص الذاكرة في كتلة متجاورة. | يتم تخصيص الذاكرة بأي ترتيب عشوائي. |
| التخصيص والتخصيص | يتم ذلك تلقائيًا عن طريق تعليمات المترجم. | يتم ذلك يدويًا بواسطة المبرمج. |
| إلغاء التخصيص | لا يتطلب إلغاء تخصيص المتغيرات. | هناك حاجة إلى إلغاء التخصيص الصريح. |
| التكلفة | Less | المزيد |
| تطبيق | يمكن تنفيذ المكدس بثلاث طرق تعتمد على المصفوفة البسيطة، باستخدام الذاكرة الديناميكية، والقائمة المرتبطة. | يمكن تنفيذ الكومة باستخدام المصفوفة والأشجار. |
| القضية الرئيسية | نقص الذاكرة | تجزئة الذاكرة |
| محلة المرجعية | تعليمات وقت التجميع التلقائي. | كاف |
| المرونة | حجم ثابت | تغيير الحجم ممكن |
| وقت الوصول | أسرع | أبطأ |
مزايا استخدام Stack
فيما يلي إيجابيات/فوائد استخدام المكدس:
- يساعدك على إدارة البيانات بطريقة Last In First Out(LIFO) وهو أمر غير ممكن مع القائمة والمصفوفة المرتبطة.
- عندما يتم استدعاء دالة، يتم تخزين المتغيرات المحلية في مكدس، ويتم تدميرها تلقائيًا بمجرد إرجاعها.
- يتم استخدام المكدس عندما لا يتم استخدام متغير خارج تلك الوظيفة.
- يسمح لك بالتحكم في كيفية تخصيص الذاكرة وإلغاء تخصيصها.
- يقوم المكدس تلقائيًا بتنظيف الكائن.
- لا تفسد بسهولة
- لا يمكن تغيير حجم المتغيرات.
مميزات استخدام الكومة
إيجابيات/فوائد استخدام ذاكرة الكومة هي:
- الكومة تساعدك على العثور على العدد الأكبر والأدنى
- يتم تشغيل مجموعة البيانات المهملة على ذاكرة الكومة لتحرير الذاكرة التي يستخدمها الكائن.
- تُستخدم طريقة الكومة أيضًا في قائمة انتظار الأولوية.
- يسمح لك بالوصول إلى المتغيرات على مستوى العالم.
- الكومة ليس لديها أي حد لحجم الذاكرة.
عيوب استخدام المكدس
سلبيات / عيوب استخدام ذاكرة المكدس هي:
- ذاكرة المكدس محدودة للغاية.
- يمكن أن يؤدي إنشاء عدد كبير جدًا من الكائنات على المكدس إلى زيادة خطر تجاوز سعة المكدس.
- الوصول العشوائي غير ممكن.
- ستتم الكتابة فوق التخزين المتغير، مما يؤدي في بعض الأحيان إلى سلوك غير محدد للوظيفة أو البرنامج.
- سوف تقع المكدس خارج منطقة الذاكرة، مما قد يؤدي إلى إنهاء غير طبيعي.
عيوب استخدام الكومة
سلبيات/عيوب استخدام ذاكرة Heaps هي:
- يمكن أن يوفر الحد الأقصى من الذاكرة التي يمكن لنظام التشغيل توفيرها
- يستغرق المزيد من الوقت لحساب.
- تعد إدارة الذاكرة أكثر تعقيدًا في ذاكرة الكومة حيث يتم استخدامها عالميًا.
- يستغرق التنفيذ وقتًا طويلاً مقارنة بالمكدس.
متى يتم استخدام الكومة أو المكدس؟
يجب عليك استخدام الكومة عندما تحتاج إلى تخصيص كتلة كبيرة من الذاكرة. على سبيل المثال، إذا كنت ترغب في إنشاء مصفوفة كبيرة الحجم أو بنية كبيرة للاحتفاظ بهذا المتغير لفترة طويلة، فيجب عليك تخصيصه في الكومة.
ومع ذلك، إذا كنت تعمل مع متغيرات صغيرة نسبيًا تكون مطلوبة فقط حتى تصبح الوظيفة التي تستخدمها حية. ثم تحتاج إلى استخدام المكدس، وهو أسرع وأسهل.



