Rumah > pembangunan bahagian belakang > C++ > Bolehkah saya Menyimpan dan Mengambil Struktur C Dengan Selamat Merentasi Platform dan Penyusun Berbeza?

Bolehkah saya Menyimpan dan Mengambil Struktur C Dengan Selamat Merentasi Platform dan Penyusun Berbeza?

Mary-Kate Olsen
Lepaskan: 2024-12-19 04:36:13
asal
249 orang telah melayarinya

Can I Safely Store and Retrieve C   Structs Across Different Platforms and Compilers?

Bolehkah saya Membaca/Menulis Struktur Serasi Merentas Platform/Penyusun dengan Selamat kepada Fail?

Struktur dalam C memberikan cabaran untuk merentas- keserasian platform kerana perbezaan potensi dalam padding antara penyusun. Perbezaan ini timbul daripada kekurangan penyeragaman dalam C pada tahap binari.

Seperti yang dijelaskan oleh Don Box dalam bukunya, "Essential COM," model masa jalan binari C tidak diseragamkan. Oleh itu, pengkompil yang berbeza boleh menggunakan penjajaran padding yang berbeza-beza untuk struct, walaupun apabila menggunakan pengkompil yang sama dengan arahan pek pragma yang berbeza.

Selain itu, susunan pengisytiharan ahli dalam struct boleh menjejaskan saiznya, walaupun ahli kekal serupa. Contohnya:

struct A {
    char c;
    char d;
    int i;
};

struct B {
    char c;
    int i;
    char d;
};
Salin selepas log masuk

Disusun dengan gcc-4.3.4, saiz A dan B berbeza walaupun ahlinya sama:

Size of A: 8
Size of B: 12
Salin selepas log masuk

Perbezaan ini menjadikannya mustahil untuk mengandaikan bahawa semua penyusun akan pad struct dengan cara yang sama. Oleh itu, tiada kaedah terjamin untuk membaca/menulis struct dengan selamat pada fail dalam cara yang serasi merentas platform/pengkompil.

Atas ialah kandungan terperinci Bolehkah saya Menyimpan dan Mengambil Struktur C Dengan Selamat Merentasi Platform dan Penyusun Berbeza?. 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