Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การใช้สแต็กและฮีปที่เหมาะสมใน C ++ หรือไม่


กอง - ตัวแปรทั้งหมดที่ประกาศภายในฟังก์ชันจะใช้หน่วยความจำจากสแต็ก ดังนั้น ตัวแปรโลคัลภายในฟังก์ชันจะอยู่บนสแต็ก

กอง − นี่คือหน่วยความจำที่ไม่ได้ใช้ของโปรแกรมและสามารถใช้เพื่อจัดสรรหน่วยความจำแบบไดนามิกเมื่อโปรแกรมทำงาน ดังนั้น หากเราต้องการให้บางสิ่งอยู่ได้นานกว่าฟังก์ชันที่ประกาศไว้ เราต้องจัดสรรมันในฮีป

ตัวอย่าง

int main() {
   int a; //get memory allocated on stack.
   int *ptr=new int[7]; //memory for 7 integers allocated on heap.
}

ปัญหาหลักในหน่วยความจำฮีปคือการแตกแฟรกเมนต์ในขณะที่ปัญหาการขาดแคลนหน่วยความจำมีแนวโน้มในสแต็กมากกว่า ขนาดหน่วยความจำสามารถเปลี่ยนได้ในฮีปซึ่งไม่สามารถเปลี่ยนแปลงในสแต็กได้