我有兩個不同的數據結構,原則上應該有相同的大小,我想知道他們爲什麼不這樣做。Windows 64位結構大小因所含數據類型而異?
struct pix1 {
unsigned char r;
unsigned char g;
unsigned char b;
unsigned char a;
unsigned char y[2];
};
struct pix2 {
unsigned char r;
unsigned char g;
unsigned char b;
unsigned char a;
unsigned short y;
};
然後,這些像素的I組4一起,因爲這樣的:
struct pix4 {
pix1 pixels[4]; // or pix2 pixels[4]
unsigned char mask;
};
...但事實證明,這樣的分組的改變的大小,根據的sizeof(PIX4),取決於我是否使用pix1或pix2。個人sizeof(pix1)== sizeof(pix2),所以我很困惑,爲什麼分組四個像素的大小會改變。我關心這個問題,因爲使用短符號編寫程序比使用2個無符號字符編程更容易,但每像素耗費0.25字節。
我不知道,如果這種體系結構特異性的,因爲我還沒有在其他類型的機器進行測試。它可以對齊嗎?這是我需要擔心的事情,還是我可以繼續執行簡短的實施?
感謝您的幫助提前。
#pragma pack(1)爲了獲得字節對齊的打包(visual studio),那麼你應該在兩種情況下獲得相同的大小。 –
正確的封裝意味着你不關心確切的表示,只關心正在提供的接口。即使內部表示使用兩個單獨的字節,爲'y'取得並返回'uint16_t'也很容易。 –
@Matthieu M .:你說的沒錯。 Getters和setter應該抽象出單個字節的訪問權限,但由於我不熟悉處理相反的endian的差異,所以我很緊張,如果我錯誤地處理了字節序,我會在代碼中引入錯誤。 – Cindeselia