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

สารบัญ:

Anonim

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

มัลลอค vs นิว

ข้อแตกต่างที่สำคัญระหว่าง malloc() และ new() คืออันแรกเป็นฟังก์ชัน C มาตรฐาน และอันหลังเป็นตัวดำเนินการที่สามารถใช้ได้ใน C++ เท่านั้น Malloc สามารถใช้และควรใช้ใน C ++ เมื่อมีเหตุผลที่ดีเท่านั้น ใหม่อนุญาตให้แทนที่ได้ แต่ malloc ไม่อนุญาตให้ใช้อย่างถูกกฎหมาย

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

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

การเปรียบเทียบระหว่าง Malloc และ New ในรูปแบบตาราง

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

มัลลอค

ใหม่

สถานที่ในภาษา Malloc มักใช้ใน C ไม่ค่อยใช้ใน C ++ ใหม่ ใช้ใน C ++ เท่านั้น
คืนสินค้า มันกลับกลายเป็นโมฆะ ใหม่กลับสู่ประเภทที่เหมาะสม
ขนาด ใน malloc ต้องคำนวณขนาดด้วยตนเอง ใน New ขนาดที่ต้องการของคอมไพเลอร์คำนวณโดยคอมไพเลอร์
เอาชนะ ไม่สามารถแทนที่ฟังก์ชัน malloc ได้อย่างถูกกฎหมาย ตัวดำเนินการใหม่ให้โอกาสในการแทนที่
พิมพ์ Malloc เป็นฟังก์ชัน C มาตรฐาน มันใช้ตัวดำเนินการเช่น ==, += เป็นต้น
พฤติกรรมเมื่อความจำไม่เพียงพอ Malloc กลับสู่ NULL เมื่อหน่วยความจำไม่เพียงพอ ใหม่ทำให้เกิดข้อยกเว้นระหว่างหน่วยความจำไม่เพียงพอ
จัดสรรใหม่ malloc() ควรจับคู่กับ free() new() ควรจับคู่กับ delete()
จัดสรรหน่วยความจำสำหรับ เกือบทุกอย่าง สำหรับอาร์เรย์ อ็อบเจ็กต์ และโครงสร้างเท่านั้น

Malloc คืออะไร?

Malloc() เป็นฟังก์ชันไลบรารีมาตรฐานในภาษา C ซึ่งย่อมาจากการจัดสรรหน่วยความจำ มันถูกใช้เพื่อจัดสรรบล็อกของหน่วยความจำที่มีขนาดเฉพาะแบบไดนามิก ขนาดของหน่วยความจำถูกจัดสรรเป็นไบต์ โดยปกติแล้วจะส่งคืนตัวชี้ประเภทเป็นโมฆะเนื่องจากมีค่าขยะ ไม่ได้เริ่มต้นหน่วยความจำในขณะที่ดำเนินการ ฟังก์ชัน Malloc ควรใช้ใน C ++ เมื่อมีความจำเป็นอย่างยิ่งต่อการใช้งานเท่านั้น มิฉะนั้น ควรจำกัดการใช้งานไว้เฉพาะ C เท่านั้น เมื่อ malloc ตรวจพบหน่วยความจำไม่เพียงพอ จะคืนค่าเป็น NULL ทันที ไม่ได้ดำเนินการเริ่มต้นหน่วยความจำ มันมี 2 อาร์กิวเมนต์ malloc() จะต้องจับคู่กับ free() เสมอ ขนาดของหน่วยความจำใน malloc ต้องคำนวณด้วยตนเอง ต้องใช้ความรู้ล่วงหน้าเกี่ยวกับขนาดของตัวดำเนินการเพื่อจัดสรรขนาดของหน่วยความจำ ไม่สามารถเรียก Constructor ของวัตถุได้ ฟังก์ชัน malloc สามารถใช้ในการจัดสรรหน่วยความจำสำหรับเกือบทุกอย่าง ฟังก์ชัน Malloc ไม่อนุญาตให้มีการแทนที่อย่างถูกกฎหมาย malloc ทำงานช้ากว่าตัวดำเนินการใหม่ใน C ++ เนื่องจากตัวดำเนินการเร็วกว่าฟังก์ชันเสมอ

ไวยากรณ์:- ptr = (castType*) malloc (ขนาด);

อะไรใหม่?

ใหม่เป็นตัวดำเนินการใน C ++ ซึ่งไม่สามารถใช้ใน C ได้ ตัวดำเนินการใหม่สามารถเรียกตัวสร้างของวัตถุและสามารถเริ่มต้นหน่วยความจำได้ คอนสตรัคเตอร์ถูกเรียกหลังจากจัดสรรหน่วยความจำแล้วเท่านั้น ขนาดของหน่วยความจำคำนวณโดยคอมไพเลอร์ กลับเป็นประเภทที่เหมาะสม สามารถใช้ตัวดำเนินการเช่น ==, += เป็นต้น ตัวดำเนินการใหม่จะจัดสรรหน่วยความจำสำหรับอาร์เรย์ วัตถุ และโครงสร้างเท่านั้น ใน C ++ ตัวดำเนินการใหม่จะถูกนำไปใช้เพื่อยื่นคำขอสำหรับการจัดสรรหน่วยความจำบนฮีป หากมีหน่วยความจำเพียงพอ ตัวดำเนินการใหม่จะเริ่มการทำงานและหลังจากนั้นจะทำงานเพื่อคืนหน่วยความจำที่จัดสรรและสร้างใหม่ให้กับตัวแปรตัวชี้ new() ควรจับคู่กับ delete() เสมอ ตัวดำเนินการนี้ใช้สำหรับการจัดสรรหน่วยความจำแบบไดนามิก การสร้างอ็อบเจ็กต์ และการทำลาย หน่วยความจำถูกจัดสรรสำหรับอ็อบเจ็กต์จากพูลที่เรียกว่า free store มันทำงานได้เร็วกว่า malloc มาก เนื่องจากเป็นตัวดำเนินการและไม่ใช่ฟังก์ชัน

ไวยากรณ์: - ตัวแปรตัวชี้ = ชนิดข้อมูลใหม่

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

บทสรุป

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

อ้างอิง

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