---
title: "Struct'lar Stack'te Yaşamaz: C# Belleği Gerçekte Nasıl Yönetir?"
url: https://blog.edumints.com/struct-lar-stack-te-yasamaz-c-bellegi-gercekte-nasil-yonetir
category: "Yazılım"
date: 2026-10-05T09:09:44.369Z
publisher: Edumints Blog
lang: tr-TR
source_name: "dev.to"
source_url: https://dev.to/smtahosin/structs-arent-on-the-stack-how-c-actually-manages-memory-128p
---

# Struct'lar Stack'te Yaşamaz: C# Belleği Gerçekte Nasıl Yönetir?

C# dünyasında hemen her geliştiriciye sınıf (class) ile yapı (struct) arasındaki farkı sorduğunuzda ezberlenmiş şu cevabı alırsınız: *"Class'lar heap'te, struct'lar stack'te yaşar."* Bu klişe; üniversite slaytlarından YouTube eğitimlerine, teknik iş mülakatlarından sektör sohbetlerine kadar her gün tekrarlanır. Ancak tamamen yanlıştır.

Yazılım geliştirirken bu yanlış zihinsel modele tutunursanız körlemesine kod yazarsınız. Uygulamanız beklenmedik Çöp Toplayıcı (Garbage Collection - GC) duraklamalarıyla karşılaştığında şaşırır, tespit edilmesi günler süren sinsi mutability hataları üretir ve modern .NET mimarisinin sunduğu en büyük performans özelliklerini kaçırırsınız.

Gelin, Common Language Runtime'ın (CLR) bellekteki verilerinizle gerçekte ne yaptığını adım adım inceleyelim.

## Kitaplardaki Ezber: Bitmek Bilmeyen Bir Efsane

Bu basitleştirme, ilk programlama derslerindeki bellek anlatımlarından doğdu: Stack hızlı ve kendini temizleyen bir yapıdır; heap ise çöp toplayıcıya muhtaçtır. Öğrencilere "int ve struct gibi küçük veriler hızlı stack'e, class gibi büyük yapılar yavaş heap'e gider" dendi.

Kulağa düzenli gelse de bu yaklaşım, bir türün **ne olduğu** ile **nerede yaşadığını** tamamen birbirine karıştırır. C# dilinde class ve struct ayrımı stack veya heap savaşı değildir; **değer semantiği (value semantics)** ile **referans semantiği (reference semantics)** ayrımıdır.

CLR bellek modelinin temel kuralı şudur: **Değer tipleri, bildirildikleri kapsayıcı (container) nerede tahsis edilmişse tam olarak orada yaşarlar.** Stack, yalnızca metot yürütmenin bir uygulama detayıdır. Bir struct, stack'te yer tutmayı değil; ham verisinin ek bir işaretçi yönlendirmesi olmadan, doğrudan tahsis alanına gömülmesini şart koşar.

## Struct'lar Gerçekte Nerede Yaşar?

Bu kuralı günlük hayattan üç farklı senaryo ile test edelim:

1. **Bir Metot İçindeki Yerel Değişkenler:** `Calculate` metodunda tanımlanan `int count = 42;` ve `Point origin = new Point(0, 0);` değerleri, ilgili iş parçacığının yığınında (thread stack frame) tutulur. Metot tamamlandığında stack göstericisi geri döner ve bellek GC'ye ihtiyaç duymadan anında boşaltılır. Kitaplardaki ezberin doğru çıktığı tek senaryo budur.
2. **Bir Sınıfın (Class) İçindeki Struct:** `Player` sınıfı içerisindeki `Health PlayerHealth` alanını ele alalım. `new Player()` örneği oluşturulduğunda, `Player` bir referans tipi olduğu için Managed Heap üzerinde ayrılır. İçindeki struct stack'e uçmaz; `Player` nesnesinin bayt yükü içerisine doğrudan gömülerek %100 **Managed Heap** üzerinde konumlanır.
3. **Bir Dizinin (Array) İçindeki Struct:** `Point[] points = new Point[1000];` örneğinde, .NET'teki tüm diziler (`System.Array`) birer referans tipidir ve Managed Heap'te tahsis edilir. CLR burada 1.000 bağımsız nesne veya işaretçi üretmez; heap üzerinde tek, bitişik (contiguous) bir bellek bloğu açarak struct'ları satır içi (inline) yerleştirir.

## Geliştiriciler İçin Pratik Çıkarımlar

- **Bellek Tahsisini Kapsayıcı Belirler:** Sırf struct kullandığınız için GC baskısından kurtulamazsınız; struct bir sınıfın veya dizinin içindeyse doğrudan heap'tedir.
- **Cache Yerelliğinden Faydalanın:** Struct dizileri heap'te bitişik dizildiği için CPU cache verimliliğini artırır ve bellek parçalanmasını önler.
- **Semantik Düşünün:** Veri modellerinizi nerede depolandıklarına göre değil, kopyalanma ve referans davranışlarına göre tasarlayın.

---

**Kaynak:** dev.to (https://dev.to/smtahosin/structs-arent-on-the-stack-how-c-actually-manages-memory-128p)
**Yayıncı:** [Edumints Blog](https://blog.edumints.com) · Alıntılarken bu URL'ye bağlantı verin: https://blog.edumints.com/struct-lar-stack-te-yasamaz-c-bellegi-gercekte-nasil-yonetir
