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 ในขณะที่หน่วยความจำใหม่แสดงข้อยกเว้นข้อผิดพลาด