完全公開 - 這是家庭作業,雖然已完成且完全可行,但我正在尋找更好的解決方案。序列化二進制結構gcc vs cl
我有一個二進制文件,它是由Visual Studio中編譯的程序創建的(我相信)。結構看起來像這樣。
struct Record { char c; double d; time_t t; };
在Windows上這種結構與Visual Studio 2008的大小給予24個字節。 1 + 8 + 8 = 24
。所以有一些填充正在進行。 Linux和gcc上的相同結構提供16個字節。 1 + 8 + 4 = 16
。爲了排列起來,我添加了一些填充並將time_t
更改爲另一種類型。那麼我的結構看起來像這樣。
struct Record { char c; char __padding[7]; double d; long long t; };
這現在可以工作,gcc給它的大小爲24字節,但它似乎有點骯髒。所以有兩個問題。
爲什麼這兩種編譯器的實現方式不同?
是否有任何__attribute__ ((aligned))
類型的選項或任何其他更清潔的解決方案呢?
你在gcc中使用「-malign-double」嗎?閱讀:http://stackoverflow.com/questions/2457182/c-malign-double-compiler-flag – 2010-08-24 14:38:10