Waktu cerita!
C, sebagai bahasa, adalah abstraksi komputer. Hal ini memungkinkan Anda untuk melakukan hal-hal, dalam hal apa yang dilakukan komputer, yaitu memanipulasi memori, melakukan matematika, mencetak sesuatu, dll.
Tetapi C hanyalah abstraksi. Dan akhirnya, apa yang diambil dari Anda adalah bahasa Assembly. Assembly adalah bahasa yang dibaca CPU, dan jika Anda menggunakannya, Anda melakukan hal-hal dalam hal CPU. Apa yang dilakukan CPU? Pada dasarnya, ia membaca dari memori, melakukan matematika, dan menulis ke memori. CPU tidak hanya menghitung angka dalam memori. Pertama, Anda harus memindahkan nomor dari memori ke memori di dalam CPU yang disebut register. Setelah selesai melakukan apa pun yang perlu Anda lakukan untuk nomor ini, Anda dapat memindahkannya kembali ke memori sistem normal. Mengapa menggunakan memori sistem sama sekali? Registrasi jumlahnya terbatas. Anda hanya mendapatkan sekitar seratus byte dalam prosesor modern, dan prosesor populer yang lebih tua bahkan lebih terbatas secara fantastis (The 6502 memiliki 3 register 8-bit untuk penggunaan gratis Anda). Jadi, operasi matematika rata-rata Anda seperti:
load first number from memory
load second number from memory
add the two
store answer into memory
Banyak dari itu ... bukan matematika. Operasi pemuatan dan penyimpanan tersebut dapat memakan waktu hingga setengah waktu pemrosesan Anda. C, sebagai abstraksi komputer, membebaskan programmer khawatir menggunakan dan menyulap register, dan karena jumlah dan jenis bervariasi antara komputer, C menempatkan tanggung jawab alokasi register hanya pada kompiler. Dengan satu pengecualian.
Saat Anda mendeklarasikan variabel register
, Anda mengatakan kepada kompiler, "Yo, saya bermaksud agar variabel ini banyak digunakan dan / atau berumur pendek. Jika saya jadi Anda, saya akan mencoba menyimpannya dalam register." Ketika standar C mengatakan kompiler tidak harus benar-benar melakukan apa-apa, itu karena standar C tidak tahu komputer apa yang Anda kompilasi, dan mungkin seperti 6502 di atas, di mana ketiga register diperlukan hanya untuk mengoperasikan , dan tidak ada register cadangan untuk menyimpan nomor Anda. Namun, ketika dikatakan Anda tidak dapat mengambil alamat, itu karena register tidak memiliki alamat. Mereka adalah tangan prosesor. Karena kompiler tidak harus memberi Anda alamat, dan karena tidak dapat memiliki alamat sama sekali, beberapa optimasi sekarang terbuka untuk kompiler. Bisa, katakanlah, menyimpan nomor dalam register selalu. Tidak Anda tidak perlu khawatir tentang tempat penyimpanannya di memori komputer (di luar keharusan untuk mendapatkannya kembali). Bahkan bisa menghukumnya menjadi variabel lain, memberikannya ke prosesor lain, memberinya lokasi yang berubah, dll.
tl; dr: Variabel berumur pendek yang mengerjakan banyak matematika. Jangan mendeklarasikan terlalu banyak sekaligus.