我可以安全地將跨平台/編譯器相容的結構體讀/寫到檔案中嗎?
C 中的結構體對跨平台/編譯器相容的結構體提出了跨平台的挑戰由於編譯器之間填充的潛在差異,平台相容性。這種差異是由於 C 在二元層級缺乏標準化造成的。
正如 Don Box 在他的書《Essential COM》中所解釋的,C 的二進制運行時模型沒有標準化。因此,不同的編譯器可以對結構採用不同的填充對齊方式,即使使用具有不同 pragma pack 指令的相同編譯器也是如此。
此外,結構中成員聲明的順序會影響其大小,即使成員仍然存在完全相同的。例如:
struct A { char c; char d; int i; }; struct B { char c; int i; char d; };
使用gcc-4.3.4 編譯,儘管A 和B 的成員相同,但其大小不同:
Size of A: 8 Size of B: 12
這種差異使得不可能假設所有編譯器將以同樣的方式填充結構。因此,沒有保證以跨平台/編譯器相容的方式安全地讀取/寫入結構到檔案的方法。
以上是我可以跨不同平台和編譯器安全地儲存和檢索 C 結構嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!