Soalan:
Adakah mungkin untuk membaca/menulis dengan selamat C struct ke fail dengan cara yang memastikan platform silang dan pengkompil keserasian?
Jawapan:
Tidak, tidak mungkin kerana kekurangan penyeragaman peringkat binari dalam C .
Menurut Don Box , C tidak mempunyai penyeragaman pada peringkat binari, bermakna penyusun yang berbeza boleh melaksanakan padding struct secara berbeza. Walaupun dalam pengkompil yang sama, penjajaran pembungkusan untuk struct boleh berbeza-beza bergantung pada pek pragma yang digunakan.
Selain itu, susunan ahli dalam struct boleh menjejaskan saiznya. Contohnya, struct dengan ahli yang sama tetapi perintah pengisytiharan yang berbeza boleh mempunyai saiz yang berbeza.
Contoh:
struct A { char c; char d; int i; }; struct B { char c; int i; char d; };
Menyusun kod di atas dengan gcc-4.3.4 menghasilkan :
8 12
Ini menunjukkan bahawa walaupun kedua-dua struct mempunyai ahli yang sama, mereka saiz berbeza.
Kesimpulan:
Standard tidak menyatakan cara padding harus dilaksanakan, menyerahkannya kepada budi bicara penyusun. Akibatnya, adalah mustahil untuk mengandaikan bahawa semua penyusun akan menggunakan peraturan padding yang sama, menjadikan keserasian merentas platform sukar dicapai.
Atas ialah kandungan terperinci Bolehkah C Structs Dibaca dan Ditulis dengan Selamat Merentasi Platform dan Penyusun?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!