ความแตกต่างระหว่าง Stack และ Heap

ผู้เขียน: Laura McKinney
วันที่สร้าง: 1 เมษายน 2021
วันที่อัปเดต: 17 พฤษภาคม 2024
Anonim
.NET Stack vs Heap
วิดีโอ: .NET Stack vs Heap

เนื้อหา


Stack และ Heap เป็นเซ็กเมนต์หน่วยความจำที่ใช้ในเทคนิคการจัดสรรหน่วยความจำ ความแตกต่างหลักระหว่าง Stack และ heap คือ stack เกี่ยวข้องกับการจัดสรรเชิงเส้นและลำดับของหน่วยความจำที่ใช้ในการจัดสรรหน่วยความจำแบบคงที่ในขณะที่ heap ทำหน้าที่เป็นกลุ่มของพื้นที่จัดเก็บที่จัดสรรหน่วยความจำแบบสุ่ม

Speed ​​เป็นพารามิเตอร์หลักที่แยก stack และ heap สแต็กเร็วกว่ากองมาก

  1. แผนภูมิเปรียบเทียบ
  2. คำนิยาม
  3. ความแตกต่างที่สำคัญ
  4. ข้อสรุป

แผนภูมิเปรียบเทียบ

พื้นฐานสำหรับการเปรียบเทียบกองกอง
ขั้นพื้นฐานหน่วยความจำถูกจัดสรรเป็น (LIFO) ล่าสุดเข้าก่อนออกก่อนหน่วยความจำถูกจัดสรรแบบสุ่ม
การจัดสรรและการจัดสรรคืนอัตโนมัติคู่มือ
ราคาน้อยกว่ามากกว่า
การดำเนินงานยากง่าย
กล่าวอ้างบน)O (1)
ปัญหาหน่วยความจำไม่เพียงพอการกระจายตัวของหน่วยความจำ
สถานที่อ้างอิงยอดเยี่ยมเพียงพอ
มีความยืดหยุ่นขนาดคงที่และไม่ยืดหยุ่นการปรับขนาดเป็นไปได้
เข้าถึงเวลาได้เร็วขึ้นช้าลง


ความหมายของสแต็ค

การจัดสรรสแต็กเป็นไปตามกลยุทธ์ LIFO (เข้าก่อนออกก่อน) สำหรับการกำหนดหน่วยความจำให้กับกระบวนการด้วยความช่วยเหลือของการดำเนินการพุชและป๊อป แต่ละบล็อกในหน่วยความจำมีขนาดคงที่ซึ่งไม่สามารถขยายหรือหดได้ รายการสุดท้ายในสแต็กสามารถเข้าถึงได้ทุกเวลา สแต็กใช้หน่วยความจำต่อเนื่องโดยที่ตัวชี้ชื่อเป็นจุดฐานสแต็กไปยังรายการแรกของสแต็กและตัวชี้อื่นที่ชื่อเป็นจุดสูงสุดของสแต็กชี้ไปยังรายการสุดท้ายของสแต็ก

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

กรอบสแต็กประกอบด้วยที่อยู่หรือค่าของพารามิเตอร์ของฟังก์ชั่นและที่อยู่ผู้ส่งซึ่งหมายถึงที่ที่ควรจะกลับมาควบคุมหลังจากเสร็จสิ้นการดำเนินการของฟังก์ชั่น

ความหมายของกอง

การจัดสรรฮีปไม่เป็นไปตามวิธีการใด ๆ ที่ชัดเจน ค่อนข้างจะอนุญาตการมอบหมายแบบสุ่มและการกำหนดหน่วยความจำแบบสุ่ม การร้องขอการมอบหมายโดยกระบวนการจะให้ตัวชี้กลับไปยังพื้นที่หน่วยความจำที่จัดสรรในฮีปและกระบวนการเข้าถึงพื้นที่หน่วยความจำที่จัดสรรผ่านตัวชี้


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

  1. ในสแต็กการจัดสรรและการจัดสรรคืนจะกระทำโดย CPU และเป็นไปโดยอัตโนมัติในขณะที่ฮีปจะต้องดำเนินการโดยโปรแกรมเมอร์ด้วยตนเอง
  2. การจัดการเฟรมฮีปมีค่าใช้จ่ายสูงกว่าการจัดการเฟรมสแต็ก
  3. การดำเนินการของสแต็กมีความซับซ้อน การดำเนินการฮีปนั้นง่ายมาก
  4. การเรียกใช้ฟังก์ชันในสแต็กใช้เวลา O (N) ในทางตรงกันข้ามมันต้องใช้เวลา O (1) ครั้งในกอง
  5. การใช้งานสแต็กส่วนใหญ่ประสบปัญหาการขาดแคลนหน่วยความจำ ในทางตรงกันข้ามปัญหาหลักในกองคือการกระจายตัว
  6. การเข้าถึงสแต็กเฟรมนั้นง่ายกว่าฮีปเนื่องจากสแต็กถูก จำกัด อยู่ในพื้นที่ขนาดเล็กของหน่วยความจำและมักจะชนแคช แต่เฟรมฮีปจะกระจายไปทั่วหน่วยความจำเพื่อให้การเข้าถึงหน่วยความจำอาจทำให้แคชหายไปมากกว่า
  7. สแต็กไม่ยืดหยุ่นขนาดหน่วยความจำที่จัดสรรไม่สามารถเปลี่ยนแปลงได้ ในทางกลับกันฮีปมีความยืดหยุ่นและหน่วยความจำที่จัดสรรสามารถเปลี่ยนแปลงได้
  8. ฮีปใช้เวลาในการเข้าถึงมากกว่าสแต็ก

ข้อสรุป

การจัดสรรสแต็กเร็วกว่า แต่ซับซ้อน ในทางกลับกัน heap นั้นช้ากว่า แต่การนำไปปฏิบัตินั้นง่ายกว่ากองซ้อน ฮีปมีประสิทธิภาพมากกว่าสแต็ก