Pointer
- Dart kursu
- Uzman
- Ders 17/47
- 5 dk
Pointer ile bellek yönetimini öğrenirsin.
Pointer
Pointer, dart:ffi ile C tarafındaki bellek adreslerini temsil eden türdür. Pointer<Int32> bir tamsayı adresi, Pointer<Double> bir ondalık adresi, Pointer<Void> ise türsüz bir adresi temsil eder.
Pointer ile value özelliği okuma/yazma yapılır: ptr.value = 42; veya ptr.value. Bellek ayırmak için calloc<Int32>() veya malloc<Int32>() kullanılır. Pointer, Dart'ın çöp toplayıcısı tarafından yönetilmez; manuel serbest bırakma gerekir.
Bellek yönetimi
Pointer belleği Dart çöp toplayıcısı tarafından yönetilmez; bu yüzden manuel yönetim gerekir. calloc sıfırlanmış bellek ayırır, malloc ise sıfırlanmamış. Ayırılan bellek ptr.callocFree() veya ptr.free() ile serbest bırakılır.
Yanlış yönetim sızıntı (leak) veya çift serbest bırakmaya (double free) yol açar. using veya arena desenleri, belleği otomatik serbest bırakmak için kullanılır. Pointer aritmetiği ptr + 1, ptr.elementAt(n) ile yapılır.
Uygulama PointerInfo sınıfı
Bir PointerInfo sınıfı tanımla: final String type; final int address; PointerInfo(this.type, this.address); alan ve kurucu. String describe() => 'Pointer<$type> @ $address'; metodu. main içinde final pi = PointerInfo('Int32', 0); yarat; print(pi.describe()); ile yazdır.
Başlangıç kodu
void main() {
// PointerInfo sınıfını tanımla (type, address; describe)
// bir PointerInfo yarat; describe() yazdır
}Örnek çözüm
class PointerInfo {
final String type;
final int address;
PointerInfo(this.type, this.address);
String describe() => 'Pointer<$type> @ $address';
}
void main() {
final pi = PointerInfo('Int32', 0);
print(pi.describe());
}Beklenen çıktı
Pointer<Int32> @ 0
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Pointer türü
final ptr = Pointer<____>.fromAddress(0);
final ptr = Pointer<Int32>.fromAddress(0);
Açıklama: Pointer<Int32> bir tamsayı bellek adresidir.
2 Pointer işlemlerini eşleştir
| Kavram | Anlamı |
|---|---|
Pointer<Int32> |
Tamsayı adresi |
ptr.value |
Değer oku/yaz |
calloc<T>() |
Sıfırlanmış ayırma |
ptr.free() |
Serbest bırakma |
3 Pointer belleğini ne yönetir?
- Dart çöp toplayıcı
- Manuel yönetim Doğru cevap
- Otomatik olarak tarayıcı
- İşletim sistemi kendiliğinden
Açıklama: pointer belleği manuel yönetilir (calloc/malloc + free).