Jumat, November 15, 2019

Kebutuhan dari tipe data Long pada bahasa C dan C++

Pada bahasa C dan C++, terdapat empat tipe data berbeda yang tersedia untuk menampun nilai integer, yaitu, short, int, long, dan long long. Setiap tipe data tersebut membutuhkan jumlah alokasi memori yang berbeda.

Tetapi terdapat sebuah perbedaan, dimana tipe data long adalah tipe data yang tidak cocok dengan tipe data lainnya. Tipe data long memiliki variasi dari segi arsitektur, sistem operasi, dan bahkan dengan kompilator yang digunakan. Pada beberapa sistem tipe data long akan bersifat seperti tipe data int atau long long seperti berikut ini:

OS                 Architecture                  Size
Windows       IA-32                             4 bytes
Windows       Intel® 64 or IA-64        4 bytes
Linux             IA-32                             4 bytes
Linux             Intel® 64 or IA-64        8 bytes
Mac OS X     IA-32                             4 bytes
Mac OS X     Intel® 64 or IA-64        8 bytes

Namun hal tersebut tetap bervariasi tergantung dari kompilator yang digunakan. Namun, sebelum memahami hal tersebut, terlebih dahulu pahami beberapa konsep tentang cross compiler.

Kompilator silang atau cross compiler adalah compiler yang mampu menciptakan kode eksekusi dari platform lain ketika kompilator sedang dijalankan. Sebagai contoh, jika dilakukan kompilasi program pada arsitektur komputer 64 bit pada Ubuntu maka akan menghasilkan program sebagai berikut:

Output in 32 bit gcc compiler:
Size of int = 4
Size of long = 4
Size of long long = 8

Output in 64 bit gcc compiler:
Size of int = 4
Size of long = 8
Size of long long = 8

Dari contoh program tersebut disimpulkan bahwa ukuran dari tipe data long bervariasi tergantung dari tipe kompilator yang digunakan untuk melakukan kompilasi program.

CPU memanggil data dari RAM dengan memberikan alamat dari lokasi menuju MAR (Memory Address Register). Ketika lokasi telah ditemukan maka data akan dikirim menuju MDR (Memory Data Register). Data tersebut akan disimpan dari Register pada Processor untuk proses tahap lanjut. Hal ini lah yang menentukan kenapa Data BUS menentukan ukuran dari Register pada prosesor. Sekarang, pada register 32 bit akan dipanggil data dengan ukuran 4byte saja, pada waktu bersamaan. Dan jika ukuran data melebihi 32 bit, maka akan membutuhkan dua kali pengambilan berulang untuk bisa mendapatkan data tersebut. Hal ini akan memperlambat kecepatan dari mesin 32 bit dibanding dengan 64bit, yang dapat menyelesaikan operasi dalam satu kali pengambilan data saja. Sehingga untuk ukuran data yang lebih kecil, tidak akan membuat perbedaan jika prosesor melakukan clock pada kecepatan yang sama. Kompilator dirancang untuk melakukan generate kode yang paling efisien untuk terget mesin arsitektur.

Sehingga, singkatnya adalah ukuran sebuah variabel bergantung pada compiler karena menghasilkan istruksi berdasarkan arsitektur target dan arsitektur sistem yang hanya berkaitan dengan ukuran bus data dan transfernya.

Saran: Jika memiliki tipe integer dengan ukuran yang sama pada semua platform adalah hal yang penting, maka sebaiknya mengganti tipe data long menjadi int atau long long. Karena ukuran dari tipe data int adalah 4byte dan ukuran dari long long adalah 8byte untuk semua kombinasi sistem operasi, arsitektur, dan kompilator.





Related Posts

Kebutuhan dari tipe data Long pada bahasa C dan C++
Oleh

"semoga yang memberikan komentar diberikan berkah kebaikan dari Allah, dijauhkan dari kejahatan, dan diberikan pahala ilmu dan amal jariyah dari sepenggal kata yang ia tinggalkan amiin :) "