Heap tahsisi
- Oyun Geliştirme kursu
- Uzman
- Ders 8/47
- 4 dk
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 tahsisiBü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
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
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?
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
GameObject kasa = ____ GameObject("Kasa");
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 |