LuvyAI — Ücretsiz başla. 18+

🚀 MODERN ISO C++ PROGRAMLAMA DERSLERİ: BÖLÜM 1 🚀 C++'a Giriş, Derleme Mimarısı, Bellek Modeli ve Tür Sistemine Genel Bakış

/*
================================================================================
🚀 MODERN ISO C++ PROGRAMLAMA DERSLERİ: BÖLÜM 1 🚀
C++'a Giriş, Derleme Mimarısı, Bellek Modeli ve Tür Sistemine Genel Bakış
================================================================================

GİRİŞ 📌
--------------------------------------------------------------------------------
Hoş geldin! Bu eğitim serisinde C++ dilini yüzeysel bir sözdizimi öğretiminin
ötesine geçerek; doğrudan ISO standartları (C++11/14/17/20/23), derleyici
mimarisi, bellek yönetimi ve donanım seviyesindeki karşılıklarıyla inceleyeceğiz.

İlk bölümde: C++ derleme aşamalarını, bellek haritasını (Stack & Heap), ISO standart
evrimini ve tip sisteminin temel mekanizmalarını ele alacağız.
*/

#include <iostream>
#include <type_traits>
#include <cstdint>

// =============================================================================
// 1. C++ DERLEME AŞAMALARI (COMPILATION PIPELINE) 🛠️
// =============================================================================
/*
* Bir C++ kaynak kodu (*.cpp) çalıştırılabilir dosyaya (binary) dönüşürken
* şu 4 ana aşamadan geçer:
*
* 1. Preprocessing (Ön İşleme):
* - `#include`, `#define`, `#ifdef` gibi directive'ler işlenir.
* - Header dosyaları kopyalanır, makrolar genişletilir.
* - Çıktı: Translation Unit (*.i / *.ii)
*
* 2. Compilation (Derleme):
* - C++ sözdizimi analiz edilir (AST oluşturulur), optimize edilir.
* - Çıktı: Hedef mimariye özel Assembly kodu (*.s / *.asm)
*
* 3. Assembly (Montaj):
* - Assembly kodu makine koduna (0101...) dönüştürülür.
* - Çıktı: Relocatable Object File (*.o / *.obj)
*
* 4. Linking (Bağlama):
* - Farklı object dosyaları ve kütüphaneler (CRT, STL) birleştirilir.
* - Sembol adresleri (function call, global var) çözümlenir (Symbol Resolution).
* - Çıktı: Executable Binary (.exe / elf)
*/


// =============================================================================
// 2. TİP SİSTEMİ VE SABİT GENİŞLİKLİ TİPLER (ISO C++11) ⚙️
// =============================================================================
/*
* C++ strongly-typed (güçlü tipli) ve statically-typed bir dildir.
* C standartlarından miras kalan `int`, `long` gibi tiplerin boyutları platforma
* ve veri modeline (ILP32, LP64, LLP64) göre değişebilir.
*
* Güvenli ve taşınabilir (portable) kod için <cstdint> altındaki fixed-width
* integer tipleri tercih edilmelidir.
*/

void demonstrate_types() {
// Platform garantili tipler
std::uint8_t u8 = 255; // 1 byte unsigned (0..255)
std::int32_t i32 = -2'147'483'648; // 4 byte signed (Digit separators ' C++14)
std::uint64_t u64 = 0xFFFF'FFFF; // 8 byte unsigned

// Type Traits ile derleme zamanı (compile-time) tip kontrolü (ISO C++11)
static_assert(sizeof(std::uint64_t) == 8, "uint64_t 8 byte olmak zorundadir!");
static_assert(std::is_integral_v<decltype(i32)>, "i32 bir tamsayi tipidir.");
}


// =============================================================================
// 3. BELLEK YÖNETİMİ MİMARİSİ: STACK VS HEAP 🧠
// =============================================================================
/*
* Bir C++ programının bellek haritası temel olarak şu bölgelerden oluşur:
*
* ┌───────────────────────┐
* │ Stack (Yığın) │ ◄── Otomatik ömürlü değişkenler (LIFO), Hızlı, Sınırlı Boyut
* ├───────────────────────┤
* │ │ │
* │ ▼ │
* │ │
* │ ▲ │
* │ │ │
* ├───────────────────────┤
* │ Heap (Serbest) │ ◄── Dinamik tahsis (new/malloc), Manuel/Smart Ptr yönetimi
* ├───────────────────────┤
* │ BSS & Data Segment │ ◄── Global & Static değişkenler
* ├───────────────────────┤
* │ Text Segment │ ◄── Çalıştırılabilir makine kodları (Read-Only)
* └───────────────────────┘
*/

void memory_demo() {
// Stack Allocation (Otomatik Ömür - RAII ilkesine tabi)
int stack_var = 42;

// Heap Allocation (Dinamik Ömür - Manuel yönetim gerektirir)
// NOT: Modern C++'ta ham 'new' kullanımı yerine Smart Pointer'lar tercih edilir!
int* heap_ptr = new int(100);

// Heap belleğinin iadesi
delete heap_ptr;
heap_ptr = nullptr; // Dangling pointer önleme
}


// =============================================================================
// 4. MAIN VE PROGRAM GİRİŞ NOKTASI 🚀
// =============================================================================

int main(int argc, char* argv[]) {
std::cout << "============================================" << std::endl;
std::cout << " ISO C++17/20/23 Dersleri - Bolum 1 " << std::endl;
std::cout << "============================================" << std::endl << std::endl;

demonstrate_types();
memory_demo();

std::cout << "✔ Derleme ve Temel Veri Tipleri Dogrulandi!" << std::endl;

return 0; // ISO C++ standardına göre main sonunda return 0 yazmak opsiyoneldir.
}

/*
================================================================================
BÖLÜM ÖZETİ VE GELECEK BÖLÜM 📝
--------------------------------------------------------------------------------
Bu bölümde C++ derleme hattını, bellek katmanlarını ve taşınabilir tip sistemini
inceledik.

Gelecek Bölüm (Bölüm 2):
- Lvalue vs Rvalue Kavramları 🔍
- Reference semantics: T&, const T& ve Rvalue Reference (T&&)
- Auto tip çıkarımı (Type Inference) ve decltype kuralları
- Constexpr ve Compile-Time Hesaplamalar (ISO C++11/14/17)
================================================================================
Bölüm 1 Sonu.
================================================================================
*/

🔒 Bu içeriği görmek için giriş yapın

 
Yanıt yazmak için giriş yapmalısınız
Forum özelliklerini kullanmak ve Level 2 üyelik satın almak için hesabınıza giriş yapın.
136,880Threads
3,309,128Messages
328,727Members
DedeleregeldikLatest member
Top Bottom