C++ Academy · Pelajaran

Batasan pada Embedded: Tanpa RTTI, Tanpa Pengecualian

Bekerja dalam subset embedded umum yang menonaktifkan RTTI dan pengecualian

Pelajaran 1 dari 414 langkah

Batasan pada Embedded: Tanpa RTTI, Tanpa Pengecualian adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.

C++ Tersemat

Sistem tersemat memiliki berbagai keterbatasan: RAM terbatas, tanpa MMU, dan tenggat waktu waktu nyata. Subset C++ "mandiri" menghapus bagian bahasa yang terlalu mahal.

Mengapa Tanpa RTTI?

RTTI (Informasi Tipe Saat Berjalan) mendukung dynamic_cast dan typeid. Setiap kelas polimorfik membawa penunjuk tambahan, sedangkan tabel RTTI menggunakan ukuran kode. Nonaktifkan dengan -fno-rtti.

Mengapa Tanpa Pengecualian?

Pengecualian memerlukan tabel penggulungan stack dan dukungan waktu proses — menambah ukuran kode serta waktu yang tidak dapat diprediksi. Banyak basis kode tersemat menggunakan -fno-exceptions.

g++ -fno-rtti -fno-exceptions main.cpp

Penanganan Kesalahan Tanpa Pengecualian

Gunakan:

  • Kode pengembalian (std::expected, std::optional, enumerasi kesalahan)
  • Parameter keluaran untuk hasil
  • std::error_code untuk kesalahan sistem

Tipe Hasil

C++23 std::expected<T, E> merepresentasikan nilai atau kesalahan — seperti tipe hasil milik Rust. Banyak proyek tersemat telah menggunakan tipe Result khusus.

std::expected<int, ErrorCode> parse(const char* s);

if (auto r = parse("42"); r) use(*r);
else                       log_error(r.error());

Menghindari Alokasi Dinamis

Fragmentasi heap dapat mengganggu sistem waktu nyata. Kode tersemat sering melarang new di luar tahap awal. Gunakan:

  • Alokasi stack
  • Larik statis
  • Kumpulan memori
  • Pengalokasi yang sesuai untuk sistem tersemat

Pola Memori Statis

Cadangkan memori pada waktu kompilasi atau saat tahap awal.

template <typename T, size_t N>
class StaticVector {
    alignas(T) char storage_[sizeof(T) * N];
    size_t size_ = 0;
public:
    void push_back(const T& v);
    // ...
};

Polimorfisme Saat Kompilasi

Ganti fungsi virtual dengan templat atau CRTP jika memungkinkan — tanpa vtable dan tanpa pemanggilan tidak langsung.

template <typename Derived>
class Base {
public:
    void process() { static_cast<Derived*>(this)->process_impl(); }
};

class Concrete : public Base<Concrete> {
public:
    void process_impl() { /* ... */ }
};

Pustaka Standar Mandiri

Subset C++ mandiri tidak menyertakan sebagian besar <iostream>, pembuatan utas, dan alokasi dinamis. Standar secara eksplisit menentukan apa saja yang tersedia.

etl: Pustaka Templat Tersemat

Embedded Template Library (ETL) menyediakan kontainer serupa STL dengan ukuran deterministik dan tanpa alokasi dinamis.

Pertimbangan Ukuran Kode

Gunakan -Os untuk optimasi ukuran, -flto untuk optimasi saat penautan, dan -ffunction-sections -fdata-sections -Wl,--gc-sections untuk membuang kode yang tidak digunakan.

Dunia Nyata: Penjelajah Mars dan Mobil

C++ banyak digunakan dalam sistem tersemat yang kritis terhadap keselamatan — otomotif (AUTOSAR), dirgantara (MISRA), dan medis (IEC 62304). Standar pengodean semakin membatasi bahasa tersebut.

Pemeriksaan Singkat

Flag kompilator mana yang menonaktifkan dukungan pengecualian dalam C++ untuk mengurangi ukuran biner?

Ringkasan

C++ tersemat menonaktifkan RTTI dan pengecualian demi ukuran kode dan keterprediksian. Ganti heap dengan memori statis, gunakan tipe hasil untuk kesalahan, dan gunakan CRTP untuk polimorfisme. Standar pengodean seperti MISRA semakin membatasi bahasa tersebut.

Gratis untuk memulai

Belajar C++ dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
51
Pelajaran
203

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Batasan pada Embedded: Tanpa RTTI, Tanpa Pengecualian” gratis?

Ya — teks lengkap “Batasan pada Embedded: Tanpa RTTI, Tanpa Pengecualian” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Batasan pada Embedded: Tanpa RTTI, Tanpa Pengecualian”?

Bekerja dalam subset embedded umum yang menonaktifkan RTTI dan pengecualian Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C++ Academy?

Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Batasan pada Embedded: Tanpa RTTI, Tanpa Pengecualian” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Batasan pada Embedded: Tanpa RTTI, Tanpa Pengecualian
  2. IO Terpetakan Memori dan Volatile
  3. Pertimbangan Waktu Nyata dan Latensi
  4. Kompilasi Silang untuk Target ARM
← Kembali ke C++ Academy