導航:首頁 > 操作系統 > 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結構體位元組對齊相關的資料

熱點內容
ai文件pdf 瀏覽:907
騰訊雲伺服器掛載混合雲 瀏覽:758
智能小車用什麼單片機 瀏覽:463
java怎麼給窗口關閉 瀏覽:940
列舉51單片機的定址方式 瀏覽:706
剪輯app怎麼寫長篇文字 瀏覽:400
app專屬流量過月租怎麼不更新 瀏覽:654
王者程序員都有誰 瀏覽:76
給牛換腳掌解壓 瀏覽:387
圍棋有多少種演算法 瀏覽:602
unity資源包在哪個文件夾 瀏覽:704
阿里雲伺服器遠程鏈接不成功 瀏覽:482
文件系統pdf 瀏覽:766
原神安卓區服什麼意思 瀏覽:37
貝殼app怎麼線上發布 瀏覽:159
如何挑選安卓系統機頂盒 瀏覽:53
安卓快充使用有什麼注意事項 瀏覽:909
黑馬程序員的雲計算網課 瀏覽:947
endnotestyle文件夾怎麼導入 瀏覽:460
講解少兒編程演講會開頭 瀏覽:425