Struct ve Union Farkları: Bellek Düzenini Anlamak
# Struct ve Union Farkları: Bellek Düzenini Anlamak
Struct ve union ikisi de birden fazla veri türünü bir araya getiren yapılardır, ama bellek yönetiminde tamamen farklı çalışırlar. Bu fark, verimli kod yazmanın temelini oluşturur.
Struct her üyesi için ayrı bellek alanı ayırır. Beş int üyesi olan bir struct, 5 × 4 = 20 byte yer kaplar (64-bit sistemde).
Union ise tüm üyelerinin aynı bellek alanını paylaştığını anlamına gelir. Beş int üyesi olan bir union sadece 4 byte yer kaplar, çünkü hepsi o 4 byteyi sırayla kullanırlar.
Bir ürün bilgisini tutacağımız yapıyı düşün. Struct'ta tüm veriler aynı anda tutulur; union'da ise farklı veri türlerini sırayla saklamak isteyebiliriz.
1#include <stdio.h>23// Struct: Tüm üyeler ayrı bellek alanında4struct Urun_Struct {5int id; // 4 byte6float fiyat; // 4 byte7char kategori; // 1 byte8int stok; // 4 byte9};1011// Union: Tüm üyeler aynı bellek alanında12union Urun_Union {13int id; // 4 byte14float fiyat; // 4 byte15char kategori; // 1 byte16int stok; // 4 byte17};1819int main() {20printf("Struct boyutu: %lu byte\n", sizeof(struct Urun_Struct));21printf("Union boyutu: %lu byte\n\n", sizeof(union Urun_Union));2223// Struct örneği24struct Urun_Struct urun1;25urun1.id = 101;26urun1.fiyat = 49.99;27urun1.kategori = 'E';28urun1.stok = 50;2930printf("=== STRUCT ==="\n);31printf("ID: %d, Fiyat: %.2f, Kategori: %c, Stok: %d\n",32urun1.id, urun1.fiyat, urun1.kategori, urun1.stok);3334// Union örneği35union Urun_Union urun2;36urun2.id = 101;37printf("\n=== UNION ==="\n);38printf("ID atandı: %d\n", urun2.id);3940urun2.fiyat = 49.99; // id'nin değeri silinir!41printf("Fiyat atandı: %.2f\n", urun2.fiyat);42printf("ID şimdi: %d (değişti!)\n", urun2.id);4344return 0;45}Beklenen Çıktı:
1Struct boyutu: 16 byte2Union boyutu: 4 byte34=== STRUCT ===5ID: 101, Fiyat: 49.99, Kategori: E, Stok: 5067=== UNION ===8ID atandı: 1019Fiyat atandı: 49.9910ID şimdi: 0 (değişti!)Struct: Tüm verileri aynı anda tutman gerekiyorsa. Çoğu durumda struct tercih edilir.
Union: Bellek kritik ise (gömülü sistemler, donanım sürücüleri) veya sırayla farklı türde veri saklamanız gerekiyorsa. Örneğin, sensör okuması yapan bir cihazda bir seferde bir veri türü geliyorsa union ekonomiktir.
Struct daha güvenli ve okunabilir; union daha ekonomik ama riskli. Eğer şüphede kalırsan, struct kullan.
0 yorum