แรมมีการแยกส่วนหรือไม่?

สารบัญ:

แรมมีการแยกส่วนหรือไม่?
แรมมีการแยกส่วนหรือไม่?
Anonim

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

รามแยกส่วนได้ไหม

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

อะไรทำให้เกิดการกระจายตัวของหน่วยความจำ

การแตกแฟรกเมนต์หน่วยความจำคือเมื่อ หน่วยความจำส่วนใหญ่ของคุณได้รับการจัดสรรในบล็อกหรือส่วนที่ไม่ต่อเนื่องกันจำนวนมาก - ทำให้เปอร์เซ็นต์ที่ดีของหน่วยความจำทั้งหมดของคุณไม่ถูกจัดสรรแต่ใช้ไม่ได้ สำหรับสถานการณ์ทั่วไปส่วนใหญ่ ส่งผลให้มีข้อยกเว้นหน่วยความจำไม่เพียงพอ หรือข้อผิดพลาดในการจัดสรร (เช่น malloc คืนค่า null)

หน่วยความจำที่แตกกระจายไม่ดีหรือไม่

โดยทั่วไปโปรแกรม c++ ไม่มีปัญหากับการกระจายตัวของหน่วยความจำ คุณเห็นหน่วยความจำเสมือนเสมอ และจัดสรรส่วนหน่วยความจำเสมือนที่ต่อเนื่องกันเสมอ สิ่งเดียวที่คุณสามารถสังเกตได้ว่าชิ้นส่วนที่จัดสรรตามลำดับไม่จำเป็นต้องอยู่ติดกันในหน่วยความจำ

คุณป้องกันหน่วยความจำกระจัดกระจายได้อย่างไร

หากคุณสามารถแยกสถานที่ที่คุณน่าจะจัดสรรบล็อกขนาดใหญ่ได้อย่างแม่นยำ คุณสามารถ (บน Windows) ได้โดยตรง โทร VirtualAlloc แทนที่จะใช้ตัวจัดการหน่วยความจำ สิ่งนี้จะหลีกเลี่ยงการแตกแฟรกเมนต์ภายในตัวจัดการหน่วยความจำปกติ