Delphi secara otomatis mengelola memori
Variabel atom di Delphi, seperti Integer, Boolean, Record, Enumeration, dll., secara otomatis dialokasikan oleh kompiler untuk memori dalam cakupan dan secara otomatis dilepaskan ketika di luar cakupan juga secara otomatis dikelola oleh Delphi.
Semua variabel ini disimpan di tumpukan , kecuali antarmuka. Selain itu, Variant dibuat secara manual oleh pemrogram menggunakan fungsi, seperti VarArrayCreate; array dinamis juga dibuat secara manual oleh pemrogram menggunakan fungsi, seperti SetLength, namun dalam kedua kasus tersebut, pemrogram tidak perlu merilisnya sendiri.
Selain itu, ada jenis variabel lain yang perlu diperhatikan, yaitu variabel yang dideklarasikan menggunakan Threadvar dan cakupannya adalah thread. Ini terutama digunakan saat menulis fungsi berulir sehingga setiap utas menggunakan satu penyimpanan lokal utas.
Memori dikelola secara manual oleh pemrogram
Pointer dan objek memerlukan pemrogram untuk menerapkan dan melepaskan memori secara manual.
Pointer termasuk PChar, Pointer (pointer yang tidak diketik), pointer record, pointer variabel (menunjuk ke variabel atom), pointer fungsi (seperti fungsi panggilan balik, dibagi menjadi fungsi global dan metode objek). Gunakan fungsi Baru untuk mengajukan permohonan memori, dan gunakan Buang untuk melepaskan penunjuk. Selain itu, GetMem, ReallocMem dan FreeMem juga merupakan serangkaian fungsi untuk menerapkan dan melepaskan memori. Anda dapat membaca dan mengatur tiga fungsi manajemen memori Delphi melalui fungsi GetMemoryManager dan SetMemoryManager.
Objek mencakup objek subkelas yang diwarisi dari dua pohon warisan, TObject dan IUnknown. Objek harus dibangun menggunakan metode konstruktor. Jika Anda tidak menentukan pemilik untuk objek yang dibuat menggunakan metode konstruktor (biasanya Buat, tetapi mungkin tidak demikian; kompiler Delphi hanya mengenali kata kunci konstruktor), Anda harus melepaskannya sendiri secara manual. Anda masih perlu memeriksa situasi sebenarnya. Itu perlu dirilis pada saat tertentu. Umumnya, metode Free digunakan untuk rilis (IUnknown tidak memerlukan rilis manual). Metode yang lebih baik adalah dengan menggunakan FreeAndNil (di unit Sysutils.pas), yang tidak hanya melepaskan memori yang ditempati tetapi juga melepaskan pointer itu sendiri.
Variabel-variabel ini disimpan di heap . Masalah lain yang perlu diperhatikan adalah pointer di TList harus dirilis oleh pemrogram sendiri.
Catatan:
1. Fungsi panggilan balik tidak termasuk dalam lingkup teknis manajemen memori. Untuk detailnya, silakan merujuk ke bagian "Penunjuk".
2. Untuk detail mengenai objek, silakan lihat bagian "Model Objek".
3. Jika sebuah pointer digunakan di banyak tempat, dan jika salah satu tempat dilepaskan, akan terjadi pengecualian jika digunakan di tempat lain. Ini merupakan masalah yang harus diperhatikan saat menggunakan pointer. Untuk informasi memori terperinci, silakan merujuk ke bagian "Penunjuk".
4. Melewati pointer memiliki dua keuntungan yang jelas: menghemat memori dan meningkatkan kecepatan. Untuk informasi detail tentang memori, lihat bagian "Petunjuk" dan "Tips Desain".
5. Cara menilai objek dan pointer adalah topik yang sangat teknis. Ada beberapa postingan tentang topik ini di csdn. Anda juga dapat melihat artikel yang ditulis oleh Aimingoo ([email protected]) berjudul "Tentang" Cara mendeteksi apakah sebuah pointer adalah Artikel “Pembahasan Mendalam Tentang Objek”. Untuk informasi memori terperinci, lihat bagian "Penunjuk" dan "Objek".
Selesai pada 2004-1-19 .
Semua hak dilindungi undang-undang. Silakan mengoreksi komentar yang tidak pantas.