ความแตกต่างระหว่าง Mmap กับ malloc ความแตกต่างระหว่าง

Anonim

mmap กับ malloc

มีหน่วยความจำแบบไดนามิกใน C และชี้ไปที่การจัดสรรหน่วยความจำในภาษาเขียนโปรแกรม C ผ่านชุดของฟังก์ชันที่มีอยู่ในไลบรารีมาตรฐาน C หนึ่งในนั้นคือ malloc ซึ่งหมายถึงการจัดสรรหน่วยความจำ ในระบบยูนิกซ์มี mmap ซึ่งหมายถึงระบบแมปหน่วยความจำที่มาพร้อมกับ I / O ที่เป็นเอกลักษณ์ของตัวเอง ทั้งสอง (mmap และ malloc) จะมีค่าเท่ากับฟังก์ชันเดียวกัน แต่การตรวจสอบข้อเท็จจริงเพิ่มเติมแสดงให้เห็นถึงความแตกต่างบางประการ ความแตกต่างเหล่านี้ที่เกิดขึ้นจากฟังก์ชันการทำงานมีดังต่อไปนี้

ความแตกต่าง

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

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

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

Malloc มีหน้าที่ในการจัดการหน่วยความจำส่วนใหญ่ ในกรณีที่โปรแกรมต้องการหน่วยความจำเพิ่มเติมระบบจะยืมข้อมูลจากระบบปฏิบัติการ Mmap ในทางกลับกันใช้สวิตช์บริบทที่แปลงเป็นที่ดินเคอร์เนล

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

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

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

การใช้ mmap ในการจัดสรรหน่วยความจำมาพร้อมกับข้อเสียที่ว่าการจัดสรรและการจัดสรรข้อมูลในชิ้นส่วนมีราคาแพง เนื่องจากข้อมูลถูกแบ่งออกเป็นหลายพื้นที่และยังทำให้ mmap ปฏิเสธการโทรระบบ

Mmap เป็นข้อได้เปรียบกว่า malloc เนื่องจากหน่วยความจำที่ใช้โดย mmap จะถูกส่งกลับไปยังระบบปฏิบัติการทันที หน่วยความจำที่ใช้โดย malloc จะไม่ถูกส่งกลับจนกว่าจะมีการแบ่งส่วนข้อมูล หน่วยความจำนี้ถูกเก็บไว้เป็นพิเศษเพื่อนำมาใช้ใหม่

'malloc' หมายถึงจุดจัดสรรหน่วยความจำหลัก

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

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