คุณต้องการ malloc ใน C ++ หรือไม่?
คุณต้องการ malloc ใน C ++ หรือไม่?

วีดีโอ: คุณต้องการ malloc ใน C ++ หรือไม่?

วีดีโอ: คุณต้องการ malloc ใน C ++ หรือไม่?
วีดีโอ: [c] การจองพื้นที่ในหน่วยความจำ malloc(...) and realloc(...) 2024, อาจ
Anonim

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

คุณต้องใช้ malloc ใน C ++ ด้วยหรือไม่

ความแตกต่างนั้นง่าย: malloc จัดสรรหน่วยความจำในขณะที่จัดสรรหน่วยความจำใหม่และเรียกตัวสร้างของวัตถุ คุณ กำลังจัดสรรหน่วยความจำสำหรับ ดังนั้น เว้นแต่ คุณ ถูก จำกัด ไว้ที่ C, คุณควร ไม่เคยใช้ malloc โดยเฉพาะอย่างยิ่งเมื่อต้องรับมือกับ C++ วัตถุ

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

ในลักษณะนี้มี malloc ใน C ++ หรือไม่

เดอะมัลลอค () ฟังก์ชันใน C++ จัดสรร NS บล็อกของหน่วยความจำที่ไม่ได้กำหนดค่าเริ่มต้นและส่งคืน NS ตัวชี้เป็นโมฆะไปยัง NS ไบต์แรกของ NS บล็อกหน่วยความจำที่จัดสรร if NS การจัดสรรสำเร็จ ถ้า NS ขนาดเป็นศูนย์ NS มูลค่าที่ส่งคืนขึ้นอยู่กับ NS การดำเนินการของ NS ห้องสมุด. มัน อาจจะหรือไม่ก็ได้ NS ตัวชี้เป็นโมฆะ

คุณทำ malloc โครงสร้างอย่างไร?

อยากได้อะไรต้องสอง malloc () NS. โครงสร้าง เวกเตอร์ *y = malloc (ขนาดของ *y); /* สังเกตตัวชี้ */ y->x = calloc(10, sizeof *y->x); ในบรรทัดแรก คุณจัดสรรหน่วยความจำสำหรับวัตถุเวกเตอร์ malloc () ส่งคืนตัวชี้ไปยังหน่วยความจำที่จัดสรร ดังนั้น y จะต้องเป็นตัวชี้เวกเตอร์