Rumah > pembangunan bahagian belakang > C++ > Bolehkah C Structs Dibaca dan Ditulis dengan Selamat Merentasi Platform dan Penyusun?

Bolehkah C Structs Dibaca dan Ditulis dengan Selamat Merentasi Platform dan Penyusun?

Mary-Kate Olsen
Lepaskan: 2024-12-20 13:17:22
asal
459 orang telah melayarinya

Can C   Structs Be Safely Read and Written Across Platforms and Compilers?

Merentas Platform Baca/Tulis Struktur C

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;
};
Salin selepas log masuk

Menyusun kod di atas dengan gcc-4.3.4 menghasilkan :

8
12
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan