Laman

Rabu, 17 April 2013

Variabel

Bahasa pemrograman mempunyai variabel global. Juga, sebuah program blok yang ruwet boleh juga menggunakan variabel yang berasal dari luar blok. Mari lewati saja hal ini dan langsung ke implementasi variabel lokal. Ditail mungkin bisa diperdalam di kuliah kompiler atau bahasa pemrograman.

Gambar di bawah ini menunjukkan stack frame dari sebuah subroutine yang aktiv. Seperti biasa (untuk kuliah ini) tiap item di dalam stack ini adalah sepanjang 4 byte yang mengisi 4 address panjang.

Seperti sebelumnya, caller menumpuk register T yang nantinya akan direstore setelah kontrol kembali. Calee menumpuk register S yang mungkin akan berubah.

Pada contoh di bawah, ruang yang disediakan dari stack untuk mengimplementasikan variabel lokal a, b, i dan j. Tiap-tiap variabel ini akan menempati 32bit panjang. Biasanya variabel akan kita devinisikan sebagai integer.

Sebuah variabel adalah lokasi di dalam run-time stack yang digunakan untuk menyimpan data. Nilai dari variabel ini mungkin akan berubah sebagaimana program dieksekusi.
Variabel a ada di dalam tumpukan stack, tidak ada bentuk lain dalam mengimplementasikan variabel. Di dalam program, memanipulasi variabel adalah dilakukan dengan menggunakan register untuk meload dan menyetore nilai yang adal di dalam ruang stack. Bagaimanapun, variable adalah yang di stack bukan register.

Quest 3: Saat stack frame di pop out, apa yang terjadi dengan variable?
Jawab: Secara konsep, variabel sudah tidak ada lagi di dalam stack saat mereka sudah di pop out.

Implementasi Variabel Lokal

Di dalam bahasa tingkat tinggi, variabel lokal diimplementasikan sebagai sebuah lokasi yang ada di run-time stack. Tiap kali subroutine aktiv, lokasi baru untuk variabel ditumpuk ke stack. Bagian stack yang menyimpan nilai ini biasa disebut frame stack atau pencatat aktivasi. Sebuah frame pointer berfungsi memegang alamat dari stack fram untuk subroutine.

Saat subroutine kembali ke caller, stack frame pop out dari stack. Dengan begitu, variabel lokal hanya eksis sebagai lokasi memori saat subroutine aktiv. Subroutine disebut aktiv apabila subroutine tersebut sedang dikerjakan, atau sedang dipanggil.

Format dari stack frame yang digunakan oleh bahasa MIPS processor adalah rumit. Ada banyak situasi yang musti diatasi dan banyak optimasi di dalamnya. Ini membutuhkan compiler untuk membuatnya benar. Tulisan ini hanya akan menggambarkan stack frame yang sederhana.

Bagian terpenting dari memahami ini adalah mengetahui apa itu variabel lokal, yang secara umum: adalah sebuah lokasi di dalam run-time stack. Ini adalah gagasan penting di dalama komputer sains, salah satu yang akan kamu ulang berkali-kali saat kamu mempelajari ilmu-ilmu lanjutan.

BAB 28 — Konvensi Linkage berbasis Frame, Variabel dan Rekursi

Bab ini mengembangkan lebih jauh terhadap konvensi linkage berbasis stack untuk membuat konvensi linkage berbasis frame. Sebuah stack frame adalah bagian dari run-time stack yang berfungsi menyimpan data-data yang diperlukan untuk subroutine.

Topik:

  • Stack frame dan frame pointer
  • Variabel lokal
  • Konvensi linkage berbasis frame sederhana
  • Optimasi compiler
  • Rekursi
  • Class penyimpanan; statik, automatik, dinamik
  • Entry point
Quest 1: Apa yang dimaksud variabel lokal dalam bahasa tingkat tinggi?
Jawab: Variabel lokal adalah nilai yang hanya aktif saat subroutine diaktifkan. Sebagai contoh variabel lokal yang ada di bahasa C: b dan c adalah variabel lokal.

int mysub( int arg )
{
  int b, c;  
  
  b = arg*2;
  c = b + 7;
  return c;  
}
(Bahasa pemrograman yang lain mempunyai prinsip yang sama, implementasinya dilakukan dengan syntax yang berbeda)