Pada Chapter ini kita kumpulkan istilah teknis yang sering muncul di dunia pemrograman C dan sistem. Setiap entri disertai definisi singkat dan konteks pemakaian. Daftar ini membantu pembaca memahami dokumen teknis berbahasa Inggris yang sering memakai istilah-istilah berikut tanpa penjelasan.

A #

  • ABI (Application Binary Interface) — Spesifikasi bagaimana kode mesin berinteraksi: calling convention, layout struct, ukuran tipe, dan symbol mangling. ABI menentukan kompatibilitas biner antar compiler atau versi library.
  • Address Sanitizer (ASan) — Tool yang mendeteksi buffer overflow, use-after-free, dan kesalahan memori lain saat runtime. Aktif dengan flag -fsanitize=address.
  • Alignment — Persyaratan bahwa alamat suatu objek harus kelipatan tertentu (misalnya int harus di alamat kelipatan 4). Memengaruhi struct layout dan akses memori.
  • Argument — Nilai yang diberikan ke parameter fungsi saat pemanggilan. Misalnya printf("halo") — "halo" adalah argument.
  • Array — Kumpulan elemen bertipe sama yang menempati memori berurutan. Diindeks dari 0.
  • ASCII — Kode 7-bit untuk merepresentasikan karakter Inggris. 128 karakter (0-127) termasuk huruf, digit, tanda baca, dan kontrol.
  • Assembly — Bahasa tingkat rendah yang mendekati instruksi mesin. Output dari tahap compilation.
  • Associativity — Aturan urutan evaluasi operator dengan precedence sama. Misalnya a = b = c dievaluasi kanan-ke-kiri (right-associative).

B #

  • Big Endian — Layout byte di mana byte paling signifikan disimpan di alamat terendah. Dipakai oleh network byte order (big endian).
  • Bit-field — Member struct yang ukurannya dalam bit, bukan byte. Memungkinkan pemaketan data padat.
  • Buffer — Area memori sementara untuk menampung data yang sedang dipindahkan. Misalnya stdout buffer menampung teks sebelum di-flush ke terminal.
  • Buffer Overflow — Menulis data melebihi ukuran buffer, mengakibatkan korupsi memori. Sering jadi celah keamanan.

C #

  • Calling Convention — Aturan bagaimana argument diteruskan ke fungsi dan nilai dikembalikan. cdecl adalah default di sebagian besar sistem x86.
  • Cast — Konversi tipe eksplisit dengan operator (type). Misalnya (int)x.
  • Compilation Unit — Satu file .c yang sedang di-compile, termasuk header yang di-#include.
  • Compiler — Program yang menerjemahkan kode sumber menjadi kode mesin. GCC dan Clang adalah compiler C populer.
  • Concurrency — Kemampuan program memproses banyak task secara bersamaan, walau tidak benar-benar paralel.
  • Constant — Nilai yang tidak berubah. Di C bisa berupa #define, const, atau enum.
  • Core Dump — File berisi snapshot memori program saat crash. Dipakai untuk analisis post-mortem dengan gdb.

D #

  • Deadlock — Situasi di mana dua thread atau lebih saling menunggu resource yang dipegang yang lain, sehingga semua terhenti.
  • Declaration — Pernyataan yang memperkenalkan nama dan tipenya tanpa mendefinisikan implementasi. Misalnya function prototype.
  • Definition — Pernyataan yang mengalokasikan memori atau memberikan implementasi. Misalnya function definition dengan body.
  • Dereference — Mengakses nilai pada alamat yang ditunjuk pointer, dengan operator *.
  • Dynamic Allocation — Alokasi memori saat runtime dengan malloc, calloc, atau realloc. Harus dibebaskan dengan free.

E #

  • Endianness — Urutan byte dalam representasi data multi-byte. Little endian = byte paling signifikan di akhir; big endian = sebaliknya.
  • errno — Variabel global yang menyimpan kode error dari fungsi standard library. Harus dicek segera setelah fungsi gagal.
  • Escape Sequence — Notasi dalam string/char literal untuk karakter khusus, misalnya \n untuk newline, \t untuk tab.

F #

  • File Descriptor — Integer yang merepresentasikan file/socket yang terbuka di POSIX system. 0=stdin, 1=stdout, 2=stderr.
  • Format Specifier — Notasi dalam printf/scanf yang menentukan tipe data yang dicetak/dibaca, misalnya %d untuk int.
  • Function Pointer — Pointer yang menunjuk ke fungsi. Dipakai untuk callback, dispatch table, dan event handler.
  • Fuzz Testing — Pengujian dengan input acak untuk menemukan crash atau perilaku tak terduga.

G #

  • Garbage Collection — Mekanisme otomatis membebaskan memori yang sudah tidak terpakai. Tidak ada di C; programmer harus free sendiri.
  • gcc — GNU Compiler Collection, compiler C paling populer di sistem open source.

H #

  • Header File — File .h berisi deklarasi yang dibagi antar file .c. Di-#include ke file yang membutuhkan.
  • Heap — Area memori untuk dynamic allocation. Tumbuh ke alamat tinggi; dikelola programmer.

I #

  • IDE (Integrated Development Environment) — Aplikasi yang menggabungkan editor, compiler, debugger, dan tools lain. CLion adalah IDE populer untuk C.
  • Include Guard — Pola #ifndef HEADER_H ... #define HEADER_H ... #endif untuk mencegah multiple inclusion.
  • Integer Overflow — Hasil operasi integer melebihi rentang tipenya. Untuk signed overflow, perilaku UB.

L #

  • Linker — Program yang menggabungkan object file dan library menjadi executable atau shared library. ld adalah linker GNU.
  • Little Endian — Layout byte di mana byte paling signifikan di alamat tertinggi. Default di x86 dan ARM.
  • Leak Sanitizer (LSan) — Tool yang mendeteksi memory leak. Otomatis aktif bersama ASan di Linux.

M #

  • Macro — Aturan substitusi teks yang diproses preprocessor. #define MAX(a,b) ((a)>(b)?(a):(b)).
  • Memory Layout — Cara program C disusun di memori: text (kode), data (variabel initialized global), bss (uninitialized), heap, stack.
  • Mutex (Mutual Exclusion) — Objek sinkronisasi yang memastikan hanya satu thread yang mengakses resource pada satu waktu.

N #

  • Null Pointer — Pointer yang menunjuk ke alamat 0 (NULL). Dereferensi null pointer menyebabkan segfault.

O #

  • Object File — File .o hasil compile yang belum di-link. Berisi kode mesin dan symbol table.
  • Opaque Pointer — Pointer ke tipe yang definisinya disembunyikan. Hanya API yang bisa mengakses internal struct.
  • Overflow — Hasil operasi melebihi kapasitas tipe. Untuk unsigned, terdefinisi (wrap-around); untuk signed, UB.

P #

  • Padding — Byte tambahan yang disisipkan ke struct untuk memenuhi alignment requirement. Menambah sizeof struct tanpa manfaat data.
  • Parameter — Variabel di definisi fungsi yang menerima argument. Misalnya int add(int a, int b) — a dan b adalah parameter.
  • Pointer — Variabel yang menyimpan alamat memori variabel lain. int *p menyimpan alamat suatu int.
  • POSIX — Standar IEEE untuk interface sistem operasi (Portable Operating System Interface). Mendefinisikan fork, exec, signals, sockets, dll.

R #

  • Race Condition — Bug saat hasil eksekusi tergantung urutan thread yang tidak deterministik. Diselesaikan dengan mutex atau atomics.
  • Reentrant — Fungsi yang aman dipanggil bersamaan dari multiple thread atau signal handler. Tidak memakai global state, tidak memanggil non-reentrant function.
  • restrict — Qualifier yang menjanjikan ke compiler bahwa pointer tidak aliasing, memberi peluang optimasi.

S #

  • Sanitizer — Tool yang menyisipkan pemeriksaan runtime ke program untuk mendeteksi UB dan kesalahan memori. ASan, UBSan, LSan.
  • Segmentation Fault (Segfault) — Sinyal SIGSEGV dikirim ke program saat mengakses memori yang tidak valid. Biasanya karena null deref atau array out-of-bounds.
  • Signed — Tipe integer yang bisa menyimpan nilai positif dan negatif. Bit paling signifikan adalah sign bit.
  • Stack — Area memori untuk variabel lokal dan return address. Tumbuh ke alamat rendah; dikelola otomatis.
  • Static Storage Duration — Variabel yang lifetime-nya sepanjang program. Termasuk variabel global dan static lokal.
  • Symbol — Nama yang dipakai linker untuk mencari definisi fungsi atau variabel lintas object file.

T #

  • Thread — Unit eksekusi dalam satu proses. Berbagi memori dengan thread lain di proses yang sama.
  • Translation Unit — Satu file .c setelah preprocessing (semua #include sudah diexpand). Satu unit compile ke satu .o.
  • Type Qualifier — Keyword yang memodifikasi tipe: const, volatile, restrict, _Atomic.

U #

  • UB (Undefined Behavior) — Kondisi di mana standar C tidak menentukan perilaku. Compiler boleh melakukan apa saja. Contoh: signed overflow, null deref, use-after-free.
  • Unsigned — Tipe integer yang hanya menyimpan nilai non-negatif. Range-nya dua kali signed.

V #

  • VA_List — Tipe untuk mengakses argumen variadic lewat va_start, va_arg, va_end.
  • VLA (Variable Length Array) — Array yang ukurannya ditentukan saat runtime (C99). Tidak disarankan untuk ukuran besar.
  • Void Pointer — Pointer void * yang bisa menunjuk tipe apa saja. Perlu cast sebelum dereference.

W #

  • Watchpoint — Breakpoint yang memantau perubahan nilai variabel di gdb. Berbeda dari breakpoint yang memantau eksekusi.
  • Wildcard Pointer — Pointer yang tidak diinisialisasi. Dereferensi menyebabkan UB.