CodeBlanks Logo Icon CodeBlanks

Heap tahsisi

Heap tahsisinin maliyetini ve kaçınma yöntemlerini öğrenirsin.

Heap tahsisi

Heap, nesnelerin saklandığı dinamik bellek bölgesidir. new anahtarıyla oluşturulan her nesne heap'te yer alır ve bu işleme heap tahsisi denir. Heap tahsisi, stack'e değer koymaya göre daha maliyetlidir.

GameObject kasa = new GameObject("Kasa"); // heap tahsisi

Büyük ya da sık yapılan tahsisler bellek baskısını artırır.

Tahsisten kaçınma

Tahsis maliyetinden kaçınmanın ilk yolu nesneleri yeniden kullanmaktır. Nesneyi bir kez üretip saklamak, her karede yenisini oluşturmaktan çok daha ucuzdur. Gereksiz geçici nesneler de azaltılmalıdır.

private Nesne nesne; // bir kez uretilir

void Start()
{
    nesne = new Nesne();
}

Böylece tahsis sayısı düşer ve GC daha seyrek çalışır.

Uygulama Tahsis maliyetini hesapla

HeapTakip sınıfında tahsisMaliyeti adında bir tam sayı alanını 10 ve toplamMaliyet adında bir tam sayı alanını 0 değeriyle tanımla. Start metodu içinde toplamMaliyet değerini tahsisMaliyeti değerinin üç katı yap ve Debug.Log ile "Toplam maliyet: " metnini toplamMaliyet ile birleştirerek yazdır.

Başlangıç kodu

Player.cs
using UnityEngine;

public class HeapTakip : MonoBehaviour
{
    // tahsisMaliyeti adli tam sayi alanini 10, toplamMaliyet adli tam sayi alanini 0 degeriyle tanimla

    void Start()
    {
        // toplamMaliyet degerini tahsisMaliyeti degerinin uc kati yap
        // "Toplam maliyet: " + toplamMaliyet biciminde yazdir
    }
}

Örnek çözüm

Player.cs
using UnityEngine;

public class HeapTakip : MonoBehaviour
{
    int tahsisMaliyeti = 10;
    int toplamMaliyet = 0;

    void Start()
    {
        toplamMaliyet = tahsisMaliyeti * 3;
        Debug.Log("Toplam maliyet: " + toplamMaliyet);
    }
}

Beklenen çıktı

Toplam maliyet: 30

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Aşağıdakilerden hangisi heap tahsisine neden olur?

Player.cs
GameObject kasa = new GameObject("Kasa");
  • Debug.Log ile metin yazdırmak
  • new ile yeni bir nesne oluşturmak Doğru cevap
  • Bir değişkene sabit değer atamak
  • Bir metodu çağırmak

Açıklama: new anahtarı heap'te yeni bir nesne ayırır; diğer işlemler tek başına tahsis yapmaz.

2 Yeni nesneyi new ile oluştur

Soru
    GameObject kasa = ____ GameObject("Kasa");
Cevap
    GameObject kasa = new GameObject("Kasa");

Açıklama: Heap tahsisi new anahtarıyla yapılır; C# dilinde nesne oluşturmanın yolu budur.

3 Heap tahsisi terimleri

Kavram Anlamı
Heap Nesnelerin saklandığı dinamik bellek
new anahtarı Heap tahsisi yapar
Tahsis maliyeti Yeni nesnenin bellek bedeli
Yeniden kullanma Tahsisi azaltan yöntem

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