CodeBlanks Logo Icon CodeBlanks

Pointer

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

main.dart
void main() {
  // PointerInfo sınıfını tanımla (type, address; describe)
  // bir PointerInfo yarat; describe() yazdır
}

Örnek çözüm

main.dart
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ü

Soru
final ptr = Pointer<____>.fromAddress(0);
Cevap
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).

Uzman bölümündeki tüm dersler