กลับไปหน้าบทความ

อ่าน 1 นาที

หน่วยความจำพูล

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

หน่วยความจำพูล

เป็นการแสดงภาพรวมระดับสูงของกลุ่มหน่วยความจำ

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

ระบบปฏิบัติการแบบเรียลไทม์หลายระบบใช้พูลหน่วยความจำ เช่นTransaction Processing Facility (PTF) POCOมีคลาสพูลหน่วยความจำให้ใช้Poco::MemoryPoolงาน

ระบบบางระบบ เช่น เว็บเซิร์ฟเวอร์Nginxใช้คำว่า " กลุ่มหน่วยความจำ" (memory pool)เพื่อหมายถึงกลุ่มของหน่วยความจำที่จัดสรรขนาดแปรผันได้ ซึ่งสามารถปลดปล่อยหน่วยความจำทั้งหมดพร้อมกันได้ในภายหลัง เรียกอีกอย่างว่า " ภูมิภาค" (region ) ดู เพิ่มเติมได้ที่ การจัดการหน่วยความจำแบบอิงภูมิภาค (region-based memory management )

การใช้งานพูลหน่วยความจำแบบง่าย

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

  • จัดสรรหน่วยความจำจากพูล ฟังก์ชันนี้จะตรวจสอบพูลที่เหมาะสมกับบล็อกที่ต้องการ หากบล็อกทั้งหมดในพูลนั้นถูกจองไว้แล้ว ฟังก์ชันจะพยายามหาบล็อกในพูลที่ใหญ่กว่าถัดไป บล็อกหน่วยความจำที่จัดสรรแล้วจะถูกแทนด้วยแฮนเดิ
  • รับตัวชี้การเข้าถึงไปยังหน่วยความจำที่จัดสรรไว้
  • ปล่อยพื้นที่หน่วยความจำที่เคยจัดสรรไว้ก่อนหน้านี้
  • ตัวอย่างเช่น สามารถนำแฮนด์เดิลมาใช้ได้โดยใช้โมดูลunsigned intโมดูลสามารถตีความแฮนด์เดิลภายในได้โดยการแบ่งออกเป็นดัชนีพูล ดัชนีบล็อกหน่วยความจำ และเวอร์ชัน ดัชนีพูลและดัชนีบล็อกหน่วยความจำช่วยให้เข้าถึงบล็อกที่เกี่ยวข้องได้อย่างรวดเร็วด้วยแฮนด์เดิล ในขณะที่เวอร์ชันซึ่งจะเพิ่มขึ้นทุกครั้งที่มีการจัดสรรใหม่ จะช่วยให้ตรวจจับแฮนด์เดิลที่มีบล็อกหน่วยความจำถูกปล่อยว่างไปแล้ว (เกิดจากแฮนด์เดิลที่ถูกเก็บไว้นานเกินไป)

พูลหน่วยความจำเทียบกับ malloc

ประโยชน์

  • พูลหน่วยความจำช่วยให้สามารถจัดสรรหน่วยความจำได้ด้วยเวลาการประมวลผลคงที่ การปล่อยหน่วยความจำสำหรับวัตถุหลายพันรายการในพูลนั้นทำได้ด้วยการดำเนินการเพียงครั้งเดียว ไม่ใช่ทีละรายการเหมือนกับ การใช้ mallocในการจัดสรรหน่วยความจำสำหรับแต่ละวัตถุ
  • สามารถจัดกลุ่มพูลหน่วยความจำในโครงสร้างแบบลำดับชั้นคล้ายต้นไม้ ซึ่งเหมาะสมสำหรับโครงสร้างการเขียนโปรแกรมพิเศษ เช่นลูปและการเรียกซ้ำ
  • หน่วยความจำแบบบล็อกขนาดคงที่ไม่จำเป็นต้องจัดเก็บข้อมูลเมตาสำหรับการจัดสรรแต่ละครั้ง ซึ่งอธิบายลักษณะต่างๆ เช่น ขนาดของบล็อกที่จัดสรร โดยเฉพาะอย่างยิ่งสำหรับการจัดสรรขนาดเล็ก วิธีนี้ช่วยประหยัดพื้นที่ได้อย่างมาก
  • ช่วยให้ระบบเรียลไทม์ทำงานได้อย่างแน่นอนโดยหลีกเลี่ยงข้อผิดพลาดหน่วยความจำไม่เพียงพอ
  • บล็อกขนาดคงที่ช่วยขจัดปัญหาการแตกตัวภายนอก ซึ่งเป็นพื้นที่ว่างเล็กๆ ที่มีขนาดเล็กเกินกว่าจะใช้งานได้[ 1 ]
  • บล็อกขนาดคงที่รองรับการเก็บขยะแบบไม่เคลื่อนที่[ 1 ]

ข้อเสีย

  • อาจจำเป็นต้องปรับแต่งพูลหน่วยความจำให้เหมาะสมกับแอปพลิเคชันที่ใช้งานพูลเหล่านั้น
  • การจัดเก็บอาร์เรย์ข้อมูลขนาดใหญ่ที่ใหญ่กว่าบล็อกเดียวอาจทำให้ระบบต้องกระจายอาร์เรย์ไปทั่วหลายบล็อกของพูล ทำให้การอ่านและการเขียนไปยังองค์ประกอบของอาร์เรย์ช้าลงกว่ากรณีที่อาร์เรย์อยู่ติดกัน[ 1 ]

ดูเพิ่มเติม

  • หน่วยความจำแบบคงที่ที่มีประสิทธิภาพและรวดเร็ว
  • PGroup PJ_POOL_GROUP — เอกสารประกอบโครงการ PJSIP เวอร์ชัน 2.14-dev
  • ตัวจัดสรรหน่วยความจำ
  • การเขียนโปรแกรมด้วยพูลหน่วยความจำ
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Memory_pool&oldid=1321029260 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ หน่วยความจำพูล

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

การใช้งานพูลหน่วยความจำแบบง่าย

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

ลิงก์ภายนอก

หน่วยความจำแบบคงที่ที่มีประสิทธิภาพและรวดเร็ว PGroup PJ_POOL_GROUP — เอกสารประกอบโครงการ PJSIP เวอร์ชัน 2.14-dev ตัวจัดสรรหน่วยความจำ การเขียนโปรแกรมด้วยพูลหน่วยความจำ ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Memory_pool&oldid=1321029260 "