1
มีวิธีที่จะบอกได้โดยทางโปรแกรมหรือไม่ว่า FastMM บล็อกหน่วยความจำบางส่วนไม่ได้เป็นอิสระหรือไม่?
ฉันกำลังพยายามตรวจสอบว่าบล็อกหน่วยความจำไม่ได้รับการปลดปล่อยหรือไม่ แน่นอนผู้จัดการบอกฉันโดยใช้กล่องโต้ตอบหรือไฟล์บันทึก แต่ถ้าฉันต้องการเก็บผลลัพธ์ในฐานข้อมูลล่ะ? ตัวอย่างเช่นฉันต้องการมีชื่อของรูทีนในตารางฐานข้อมูลที่จัดสรรบล็อกที่กำหนดไว้ในตารางฐานข้อมูล หลังจากอ่านเอกสารของ FastMM ฉันรู้ว่าตั้งแต่เวอร์ชัน 4.98 เรามีความเป็นไปได้ที่จะได้รับแจ้งจากผู้จัดการเกี่ยวกับการจัดสรรหน่วยความจำอิสระและการจัดสรรใหม่เมื่อเกิดขึ้น ตัวอย่างเช่นOnDebugFreeMemFinishเหตุการณ์ที่ส่งถึงเราPFullDebugBlockHeaderซึ่งมีข้อมูลที่เป็นประโยชน์ มีสิ่งหนึ่งที่PFullDebugBlockHeaderขาดหายไป - ข้อมูลหากแอปพลิเคชันเป็นอิสระจากบล็อกที่ระบุ เว้นแต่OnDebugFreeMemFinishจะถูกเรียกเฉพาะสำหรับบล็อกที่ไม่เป็นอิสระ? นี่คือสิ่งที่ฉันไม่ทราบและต้องการค้นหา ปัญหาคือแม้แต่การเชื่อมต่อในOnDebugFreeMemFinishกรณีที่ฉันไม่สามารถค้นหาได้ว่าบล็อกนั้นเป็นอิสระหรือไม่ นี่คือตัวอย่าง: program MemLeakTest; {$APPTYPE CONSOLE} uses FastMM4, ExceptionLog, SysUtils; procedure MemFreeEvent(APHeaderFreedBlock: PFullDebugBlockHeader; AResult: Integer); begin //This is executed at the end, but how should I know that this block should be freed //by application? …