Delphi จัดการหน่วยความจำโดยอัตโนมัติ
ตัวแปรอะตอมมิก ใน Delphi เช่น จำนวนเต็ม บูลีน บันทึก การแจงนับ ฯลฯ จะถูกจัดสรรโดยอัตโนมัติโดยคอมไพเลอร์สำหรับหน่วยความจำภายในขอบเขต และเผยแพร่โดยอัตโนมัติเมื่ออยู่นอกขอบเขต นอกจากนี้ สตริง ตัวแปร อาร์เรย์ไดนามิก และอินเทอร์เฟซ ได้รับการจัดการโดยอัตโนมัติโดย Delphi
ตัวแปรเหล่านี้ทั้งหมดถูกเก็บไว้ใน สแต็ก ยกเว้นอินเทอร์เฟซ นอกจากนี้ Variant ยังถูกสร้างขึ้นด้วยตนเองโดยโปรแกรมเมอร์โดยใช้ฟังก์ชัน เช่น VarArrayCreate นอกจากนี้ โปรแกรมเมอร์ยังสร้างอาร์เรย์แบบไดนามิกโดยใช้ฟังก์ชัน เช่น SetLength แต่ในทั้งสองกรณี โปรแกรมเมอร์ไม่จำเป็นต้องเผยแพร่ด้วยตนเอง
นอกจากนี้ยังมีตัวแปรอีกประเภทหนึ่งที่ต้องสังเกต ซึ่งก็คือตัวแปรที่ประกาศโดยใช้ Threadvar และขอบเขตของมันคือเธรด ส่วนใหญ่จะใช้เมื่อเขียนฟังก์ชันเธรดเพื่อให้แต่ละเธรดใช้ที่เก็บข้อมูลภายในเธรดเดียว
หน่วยความจำจัดการด้วยตนเองโดยโปรแกรมเมอร์
พอยน์เตอร์ และ ออบเจ็กต์ ต้องการให้โปรแกรมเมอร์สมัครและปล่อยหน่วยความจำด้วยตนเอง
ตัวชี้ประกอบด้วย PChar ตัวชี้ (ตัวชี้ที่ไม่ได้พิมพ์) ตัวชี้บันทึก ตัวชี้ตัวแปร (ชี้ไปที่ตัวแปรอะตอมมิก) ตัวชี้ฟังก์ชัน (เช่นฟังก์ชันเรียกกลับ แบ่งออกเป็นฟังก์ชันส่วนกลางและวิธีการของวัตถุ) ใช้ฟังก์ชันใหม่เพื่อใช้หน่วยความจำ และใช้ Dispose เพื่อปล่อยพอยน์เตอร์ นอกจากนี้ GetMem, ReallocMem และ FreeMem ยังเป็นชุดฟังก์ชันสำหรับการใช้และปล่อยหน่วยความจำ คุณสามารถอ่านและตั้งค่าฟังก์ชันการจัดการหน่วยความจำทั้งสามของ Delphi ผ่านฟังก์ชัน GetMemoryManager และ SetMemoryManager
วัตถุรวมถึงวัตถุคลาสย่อยที่สืบทอดมาจากแผนผังการสืบทอดสองรายการ TObject และ IUnknown วัตถุจะต้องถูกสร้างขึ้นโดยใช้วิธีคอนสตรัคเตอร์ หากคุณไม่ได้ระบุเจ้าของสำหรับออบเจ็กต์ที่สร้างขึ้นโดยใช้วิธี Constructor (โดยปกติคือ Create แต่อาจไม่เป็นเช่นนั้น คอมไพเลอร์ของ Delphi รู้จักเฉพาะคีย์เวิร์ด Constructor) คุณต้องเผยแพร่ด้วยตนเอง แม้ว่าคุณจะระบุเจ้าของก็ตาม คุณยังต้องตรวจสอบสถานการณ์จริงว่าจะต้องเผยแพร่ในช่วงเวลาใดเวลาหนึ่ง โดยทั่วไป วิธีการแบบฟรีจะถูกใช้สำหรับการเปิดตัว (IUnknown ไม่ต้องการการเปิดตัวแบบแมนนวล) วิธีที่ดีกว่าคือการใช้ FreeAndNil (ในหน่วย Sysutils.pas) ซึ่งไม่เพียงแต่ปล่อยหน่วยความจำที่ถูกครอบครองเท่านั้น แต่ยังปล่อยตัวชี้อีกด้วย
ตัวแปรเหล่านี้ถูกเก็บไว้ใน ฮีป ปัญหาอีกประการหนึ่งที่ต้องให้ความสนใจก็คือตัวชี้ใน TList จะต้องได้รับการเผยแพร่โดยโปรแกรมเมอร์เอง
บันทึก:
1. ฟังก์ชั่นการโทรกลับไม่อยู่ในขอบเขตทางเทคนิคของการจัดการหน่วยความจำ สำหรับรายละเอียด โปรดดูส่วน "ตัวชี้"
2. สำหรับรายละเอียดเกี่ยวกับวัตถุ โปรดดูส่วน "โมเดลวัตถุ"
3. หากใช้พอยน์เตอร์ในหลายแห่ง และหากมีการปล่อยจุดใดจุดหนึ่ง จะมีข้อยกเว้นเกิดขึ้นหากใช้พอยน์เตอร์ในที่อื่น นี่เป็นปัญหาที่ควรคำนึงถึงเมื่อใช้พอยน์เตอร์ สำหรับข้อมูลหน่วยความจำโดยละเอียด โปรดดูส่วน "ตัวชี้"
4. การผ่านพอยน์เตอร์มีข้อดีสองประการที่ชัดเจน: ประหยัดหน่วยความจำและปรับปรุงความเร็ว สำหรับข้อมูลหน่วยความจำโดยละเอียด โปรดดูส่วน "พอยน์เตอร์" และ "เคล็ดลับการออกแบบ"
5. วิธีตัดสินวัตถุและตัวชี้เป็นหัวข้อทางเทคนิค มีบางโพสต์ในหัวข้อนี้ใน csdn คุณยังสามารถดูบทความที่เขียนโดย Aimingoo ([email protected]) ในหัวข้อ "เกี่ยวกับ" วิธีตรวจสอบว่าตัวชี้ เป็นบทความ "เสวนาเจาะลึกวัตถุ" สำหรับข้อมูลหน่วยความจำโดยละเอียด โปรดดูส่วน "ตัวชี้" และ "วัตถุ"
สร้างเสร็จเมื่อ 2547-1-62 .
สงวนลิขสิทธิ์ โปรดแก้ไขความคิดเห็นที่ไม่เหมาะสม