ความแตกต่างระหว่าง Mmap และ Malloc (พร้อมตาราง)

สารบัญ:

Anonim

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

เอ็มแมป vs มัลลอค

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

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

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

ตารางเปรียบเทียบระหว่าง Mmap และ Malloc

พารามิเตอร์ของการเปรียบเทียบ

Mmap

มัลลอค

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

Mmap คืออะไร?

Mmap ถูกอ้างถึงการเรียกระบบ Unix ที่สอดคล้องกับ POSIX ที่แมปข้อมูล ไฟล์ หรืออุปกรณ์ลงในหน่วยความจำ เป็นวิธีการอินพุตและเอาต์พุตของการแมปหน่วยความจำ ในกระบวนการเรียก การแมปใหม่จะถูกสร้างขึ้นในพื้นที่ที่อยู่เสมือน ใน addr. พบแอดเดรสเริ่มต้นของการแมปใหม่ และความยาวของการแมปถูกระบุโดยอาร์กิวเมนต์ความยาว (ซึ่งควรมากกว่า 0)

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

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

Malloc คืออะไร?

malloc () เป็นฟังก์ชันการจัดสรรหน่วยความจำที่จัดสรรขนาดไบต์และส่งตัวชี้กลับไปยังหน่วยความจำที่ได้รับการจัดสรร ไม่ได้ตั้งค่าหน่วยความจำไว้ที่ตำแหน่งเริ่มต้น หากชื่อไบต์ของขนาดเป็น 0 ดังนั้น NULL หรือตัวชี้ค่าเฉพาะจะถูกส่งโดย malloc () ซึ่งสามารถส่งต่อไปยัง free () ได้สำเร็จในภายหลัง

พื้นที่หน่วยความจำที่ชี้โดย ptr ถูกปล่อยโดยฟังก์ชัน free () ซึ่งควรจะส่งกลับโดย malloc () มิฉะนั้น พฤติกรรมที่ไม่ได้กำหนดจะเกิดขึ้น หากมีการเรียก free (ptr) ก่อนหน้านี้ ไม่มีการดำเนินการใด ๆ เสร็จสิ้นหรือดำเนินการหากพบ ptr เป็น NULL หากพบ ptr เป็น NULL ค่าของการโทรจะเท่ากับ malloc (ขนาด) สำหรับทุกค่าของขนาด หากมีค่าเท่ากับ 0 และไม่พบ ptr ว่าเป็น NULL ค่าการโทรจะเท่ากับ free (ptr)

เมื่อ ptr เป็น NULL เท่านั้น ควรส่งกลับโดยการเรียก malloc() ก่อนหน้านี้ และพื้นที่ที่ชี้ถูกเปลี่ยนให้ฟรี (ptr) ตามค่าเริ่มต้น กลยุทธ์การจัดสรรหน่วยความจำในแง่ดีจะตามด้วย Linux ซึ่งหมายความว่าหาก malloc () ส่งกลับที่ไม่ใช่ค่า NULL มีโอกาสที่หน่วยความจำอาจสูญหาย และหากปรากฎว่าระบบมีหน่วยความจำไม่เพียงพอ OOM killer จะทำลายกระบวนการเพียงไม่กี่ขั้นตอน

ความแตกต่างหลักระหว่าง Mmap และ Malloc

บทสรุป

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

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

อ้างอิง

ความแตกต่างระหว่าง Mmap และ Malloc (พร้อมตาราง)