स्टैक - फंक्शन के अंदर घोषित सभी वेरिएबल्स स्टैक से मेमोरी लेते हैं। इसलिए, किसी फंक्शन के अंदर कोई भी लोकल वेरिएबल स्टैक पर रहता है।
हीप - यह प्रोग्राम की अनुपयोगी मेमोरी है और प्रोग्राम चलने पर डायनामिकली मेमोरी आवंटित करने के लिए उपयोग की जा सकती है। इसलिए यदि हम चाहते हैं कि कोई चीज उस फंक्शन से अधिक समय तक जीवित रहे जिसने इसे घोषित किया है, तो हमें इसे हीप पर आवंटित करना होगा।
उदाहरण
int main() {
int a; // स्टैक पर मेमोरी आवंटित होती है
int *ptr = new int[7]; // 7 इंटीजर्स के लिए हीप पर मेमोरी आवंटित होती है
}
हीप मेमोरी में मुख्य समस्या फ्रैगमेंटेशन है जबकि स्टैक में मेमोरी की कमी की समस्या अधिक देखी जाती है। हीप में मेमोरी आकार बदला जा सकता है जो स्टैक में नहीं बदला जा सकता।