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.
Şema 2.1: Fonksiyon Aktivasyon Kaydı (Activation Record)
2.3 İleri Seviye: Derleme Zamanı Mantığı
#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)
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."