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.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1 <stdio.h>
2
3// Struct: Tüm üyeler ayrı bellek alanında
4struct Urun_Struct {
5int id; // 4 byte
6float fiyat; // 4 byte
7char kategori; // 1 byte
8int stok; // 4 byte
9};
10
11// Union: Tüm üyeler aynı bellek alanında
12union Urun_Union {
13int id; // 4 byte
14float fiyat; // 4 byte
15char kategori; // 1 byte
16int stok; // 4 byte
17};
18
19int main() {
20printf("Struct boyutu: %lu byte\n", sizeof(struct Urun_Struct));
21printf("Union boyutu: %lu byte\n\n", sizeof(union Urun_Union));
22
23// Struct örneği
24struct Urun_Struct urun1;
25urun1.id = 101;
26urun1.fiyat = 49.99;
27urun1.kategori = 'E';
28urun1.stok = 50;
29
30printf("=== STRUCT ==="\n);
31printf("ID: %d, Fiyat: %.2f, Kategori: %c, Stok: %d\n",
32urun1.id, urun1.fiyat, urun1.kategori, urun1.stok);
33
34// Union örneği
35union Urun_Union urun2;
36urun2.id = 101;
37printf("\n=== UNION ==="\n);
38printf("ID atandı: %d\n", urun2.id);
39
40urun2.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);
43
44return 0;
45}

Beklenen Çıktı:

1Struct boyutu: 16 byte
2Union boyutu: 4 byte
3
4=== STRUCT ===
5ID: 101, Fiyat: 49.99, Kategori: E, Stok: 50
6
7=== UNION ===
8ID atandı: 101
9Fiyat atandı: 49.99
10ID ş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.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz