2.1 Dallanma Öngörüsü (Branch Prediction)

Modern işlemciler, bir `if` bloğunun hangi yöne gideceğini tahmin etmeye çalışan Dallanma Öngörücüsü (Branch Predictor) birimlerine sahiptir. Yanlış tahmin, işlemci boru hattının (Pipeline) boşaltılmasına ve ciddi performans kaybına yol açar.

C++20: [[likely]] ve [[unlikely]] Öznitelikleri (Attributes)

C++20 ile birlikte, derleyiciye hangi dalın daha olası olduğunu belirtebiliriz. Bu, derleyicinin makine kodunu önbellek dostu (Cache-friendly) şekilde düzenlemesine yardımcı olur.

2.2 Fonksiyon Çağrı Yığını (Call Stack) Mimarisi

Bir fonksiyon çağrıldığında, bellekte bir Yığın Çerçevesi (Stack Frame) oluşturulur.

graph TD Main[main fonksiyonu] -->|Çağrı| FuncA[Fonksiyon A Frame] FuncA -->|Çağrı| FuncB[Fonksiyon B Frame] FuncB -->|Dönüş| FuncA FuncA -->|Dönüş| Main subgraph "Yığın Çerçevesi İçeriği (Stack Frame Content)" Direction[Yerel Değişkenler] Params[Parametreler] RetAddr[Dönüş Adresi] PrevBP[Önceki Çerçeve İşaretçisi] end

Şema 2.1: Fonksiyon Aktivasyon Kaydı (Activation Record)

2.3 İleri Seviye: Derleme Zamanı Mantığı

compile_time_logic.cpp
#include <iostream>
#include <array>

/**
 * @brief consteval: Sadece derleme zamanında çalışmayı garanti eder.
 * @details Akademik Not: Bu fonksiyon çalışma zamanında (runtime) ASLA yük oluşturmaz.
 */
consteval int faktoriyel(int n) {
    return (n <= 1) ? 1 : n * faktoriyel(n - 1);
}

int main() {
    // Derleme zamanında hesaplanır
    constexpr int sonuc = faktoriyel(5); 

    int x = 10;
    if (x > 0) [[likely]] {
        std::cout << "Pozitif deger analizi: " << sonuc << std::endl;
    } else [[unlikely]] {
        std::cout << "Negatif veya sifir senaryosu." << std::endl;
    }

    return 0;
}

Mimarın Analizi:

`consteval` (C++20), `constexpr`'in daha katı bir versiyonudur. Derleyicinin bu kodu çalışma zamanına bırakma lüksü yoktur. Bu, Sıfır Maliyetli Soyutlama (Zero-cost Abstraction) ilkesinin zirvesidir.

Hiyerarşik Kapsam (Scope):

C++'da bir değişkenin ömrü, en içteki süslü parantez `{}` bittiğinde sonlanır. Bu, bellek yönetiminde Otomatik Depolama Süresi (Automatic Storage Duration) olarak adlandırılır.

⚠️ Sık Yapılan Hatalar (Common Pitfalls)

Dangling Reference in Return: Yerel bir değişkenin referansını fonksiyondan dönmek. Fonksiyon bittiğinde değişken yığından (stack) silinir, referans geçersiz bir adresi gösterir.
Short-circuit Evaluation Side Effects: `&&` veya `||` operatörlerinde ikinci kısmın çalışmama ihtimalini göz ardı ederek orada kritik bir işlem (atama vb.) yapmak.

2.5 Bilgi Ölçme ve Uygulama

Soru: `consteval` ve `constexpr` arasındaki temel fark nedir?

Pratik Egzersiz:

"trcpp-telegram topluluğunda tartışılan bir konuyu ele alalım: Bir `switch-case` bloğunda `[[fallthrough]]` özniteliğini kullanarak, kasıtlı olarak bir sonraki duruma geçiş yapan güvenli bir kod yapısı tasarlayın."