Di dunia Unix, ada beberapa kemungkinan pengaturan untuk ukuran integer dan pointer untuk platform 64-bit. Dua yang paling banyak digunakan adalah ILP64 (sebenarnya, hanya sedikit contoh ini; Cray adalah salah satunya) dan LP64 (untuk hampir semua yang lainnya). Akronim berasal dari 'int, long, pointer are 64-bit' dan 'long, pointer are 64-bit'.
Type ILP64 LP64 LLP64
char 8 8 8
short 16 16 16
int 64 32 32
long 64 64 32
long long 64 64 64
pointer 64 64 64
Sistem ILP64 ditinggalkan dan digantikan oleh LP64 (yaitu, hampir semua peserta kemudian menggunakan LP64, berdasarkan rekomendasi dari grup Aspen; hanya sistem dengan warisan panjang operasi 64-bit yang menggunakan skema yang berbeda). Semua sistem Unix 64-bit modern menggunakan LP64. MacOS X dan Linux adalah sistem 64-bit modern.
Microsoft menggunakan skema berbeda untuk beralih ke 64-bit: LLP64 ('panjang, pointer 64-bit'). Ini memiliki arti bahwa perangkat lunak 32-bit dapat dikompilasi ulang tanpa perubahan. Ini memiliki kerugian menjadi berbeda dari apa yang orang lain lakukan, dan juga membutuhkan kode untuk direvisi untuk mengeksploitasi kapasitas 64-bit. Selalu ada revisi yang diperlukan; itu hanyalah serangkaian revisi yang berbeda dari yang dibutuhkan pada platform Unix.
Jika Anda merancang perangkat lunak Anda dengan nama tipe integer platform netral, mungkin menggunakan <inttypes.h>
header C99 , yang, ketika tipe tersedia di platform, menyediakan, ditandatangani (terdaftar) dan tidak ditandatangani (tidak terdaftar; awalan dengan 'u'):
int8_t
- bilangan bulat 8-bit
int16_t
- bilangan bulat 16-bit
int32_t
- bilangan bulat 32-bit
int64_t
- Bilangan bulat 64-bit
uintptr_t
- bilangan bulat unsigned yang cukup besar untuk menampung pointer
intmax_t
- ukuran integer terbesar di platform (mungkin lebih besar dari int64_t
)
Anda kemudian dapat mengkodekan aplikasi Anda menggunakan jenis ini di tempat yang penting, dan sangat berhati-hati dengan jenis sistem (yang mungkin berbeda). Ada intptr_t
tipe - tipe integer bertanda tangan untuk memegang pointer; Anda harus berencana untuk tidak menggunakannya, atau hanya menggunakannya sebagai hasil pengurangan dua uintptr_t
nilai ( ptrdiff_t
).
Tapi, seperti yang ditunjukkan pertanyaan tersebut (tidak percaya), ada sistem yang berbeda untuk ukuran tipe data integer pada mesin 64-bit. Terbiasalah; dunia tidak akan berubah.