หน่วยความจำที่จัดสรรว่างหรือไม่?

หน่วยความจำที่จัดสรรว่างหรือไม่?
หน่วยความจำที่จัดสรรว่างหรือไม่?
Anonim

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

หน่วยความจำที่จัดสรรทำให้ว่างได้อย่างไร

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

จะเกิดอะไรขึ้นถ้าคุณไม่ว่างหน่วยความจำที่จัดสรร

ในกรณีส่วนใหญ่ การจัดการคืนสินค้า memory ก่อนออกจากโปรแกรมจะไม่มีประโยชน์ ระบบปฏิบัติการจะเรียกคืนมันต่อไป Free จะแตะและเพจในวัตถุที่ตายแล้ว ระบบปฏิบัติการจะไม่ ผลที่ตามมา: ระวัง "เครื่องตรวจจับการรั่วไหล" ที่นับการจัดสรร

การจัดสรรหน่วยความจำแพงไหม

การวัดต้นทุนอย่างไร้เดียงสาของการจัดสรรและการเพิ่มหน่วยความจำขนาดใหญ่อาจสรุปได้ว่ามีค่าใช้จ่ายประมาณ 7.5 μs สำหรับแต่ละการจัดสรร/คู่ฟรี อย่างไรก็ตาม มีค่าใช้จ่ายต่อ MB แยกกันสามรายการสำหรับการจัดสรรขนาดใหญ่

realloc สามารถปล่อยพื้นที่หน่วยความจำที่จัดสรรไว้ได้หรือไม่ ถ้าใช่ อย่างไร

ฟังก์ชัน realloc จะจัดสรร จัดสรรใหม่ หรือเพิ่มบล็อกของหน่วยความจำที่ระบุโดย old_blk ตามกฎต่อไปนี้: หาก old_blk เป็น NULL บล็อกใหม่ของหน่วยความจำขนาดไบต์ เป็นจัดสรร ถ้าขนาดเป็นศูนย์ จะเรียกใช้ฟังก์ชันฟรีเพื่อปล่อยหน่วยความจำที่ old_blk ชี้ไป