導航:首頁 > 操作系統 > linux結構體位元組對齊

linux結構體位元組對齊

發布時間:2022-09-23 17:48:14

A. 結構體的定義為什麼要位元組對齊

結構體所佔的內存空間在理論上是等於它所包含的所有數據元素的,但在實際操作中像vc++6.0和c++bulider默認的都是8位元組對齊,所以導致二者所佔內存空間不一致。你可以在setting選項中將位元組對齊方式設置為1位元組對齊。

B. 結構體成員的位元組對齊

這個問題都很有深度啊;

首先我要說的是,位元組對齊在不同編譯器下語法是不一樣的,在GCC中是#pragma push(1) #pragma pack(); 在MS C++中用VC的代碼項里可以調整,默認是8位元組;

typedef struct
{
char c;
int i;
}test;

位元組對齊,是對齊,比如說char 與 int 如果是4位元組對齊,那麼char也會佔用4個位元組,總共佔8位元組,而且結構體對象存儲是按照順序存的,char 肯定在int前面。第二種情況如果1位元組對齊,意味著char只佔1位元組,而結下來int會佔用4位元組,這個N位元組對齊的意思是,每個成員佔用空間必須是N位元組的倍數,不足N位元組的佔用N位元組。那麼以1位元組對齊那它佔用5個位元組。

還有你說的每種數據是低位還是高位在前,這個根處理器有關,Intel處理是小端對齊,比如說一個整數522387969用16進製表示是:0x1f 23 02 01,在Intel處理器中表示是0x01 02 23 1f,所以在內存用0x01 02 03 1f來示522387969,這就是所謂有小端對齊;但在arm處理器中522387969表示是0x1f 23 02 01,這就是所謂的大端對齊,這種方式又叫作網路位元組序。

當然前面說的位元組序只是對int long short這些內置(built in)數據類型用效,對結構體內如果有int long這類成員也會有所謂的位元組序,如前面所說,不管是什麼序結構體對象存儲是按照順序存,先定義的成員肯定在後定義的成員前面,但單個成員有位元組序,不知這樣說,你的明白?

不是,請仔細體會這句話:這個N位元組對齊的意思是,每個成員佔用空間必須是N位元組的倍數,不足N位元組的佔用N位元組。

大於N位元組就湊夠N位元組的倍數,比如按3位元組對齊,那麼一個4位元組的int將占據6位元組~

閱讀全文

與linux結構體位元組對齊相關的資料

熱點內容
做演算法還是開發 瀏覽:872
按鍵精靈自定義圖層命令 瀏覽:351
魅藍3手機音視頻文件夾 瀏覽:943
安卓手機製表怎麼換行 瀏覽:213
牆柱搭接箍筋怎麼加密 瀏覽:455
怎麼加密不讓人打開 瀏覽:336
2g3g演算法 瀏覽:206
python可以在net開發 瀏覽:934
編程里的hr啥意思 瀏覽:411
上海php兼職 瀏覽:728
順豐app如何驗證學生 瀏覽:380
伺服器mac地址過濾器 瀏覽:942
程序員一年內被開除 瀏覽:456
福建文檔課件加密企業 瀏覽:790
appstore美國的界面怎麼看呀 瀏覽:533
hlt單片機 瀏覽:325
CA的命令 瀏覽:685
安卓怎麼傳王者應用給蘋果 瀏覽:923
aws雲伺服器自建 瀏覽:840
如何更換伺服器登錄網站 瀏覽:700