อ่าน 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
- ตัวจัดสรรหน่วยความจำ
- การเขียนโปรแกรมด้วยพูลหน่วยความจำ
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ หน่วยความจำพูล
หน่วยความจำพูล หรือที่เรียกว่า การจัดสรรบล็อกขนาดคงที่ คือการใช้ พูล ใน การจัดการหน่วยความจำ ที่อนุญาตให้ จัดสรรหน่วยความจำแบบไดนามิก การจัดสรรหน่วยความจำแบบไดนามิกสามารถทำได้...
การใช้งานพูลหน่วยความจำแบบง่าย
โมดูลพูลหน่วยความจำแบบง่ายสามารถจัดสรรพูลได้ เช่น สามพูลในระหว่าง การคอมไพล์ โดยมีขนาดบล็อกที่เหมาะสมที่สุดสำหรับแอปพลิเคชันที่ใช้งานโมดูลนั้น แอปพลิเคชันสามารถจัดสรร เข้าถึง และปลดปล่อยหน่วยความจำผ่านอินเทอร์เฟซต่อไปนี้:
ลิงก์ภายนอก
หน่วยความจำแบบคงที่ที่มีประสิทธิภาพและรวดเร็ว PGroup PJ_POOL_GROUP — เอกสารประกอบโครงการ PJSIP เวอร์ชัน 2.14-dev ตัวจัดสรรหน่วยความจำ การเขียนโปรแกรมด้วยพูลหน่วยความจำ ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Memory_pool&oldid=1321029260 "