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

熱點內容
機戰單機命令 瀏覽:461
伺服器如何訪問indexhtml 瀏覽:764
企鵝程序員 瀏覽:941
Android指定圖庫 瀏覽:351
男生身高164的程序員 瀏覽:949
銳捷交換機查看交換機命令 瀏覽:811
魔獸世界橙裝凶暴命令 瀏覽:231
伺服器主機怎麼關閉聲音 瀏覽:471
開山二級壓縮價格 瀏覽:697
linux輸出變數 瀏覽:722
lol外服有什麼伺服器 瀏覽:872
哈希值演算法 瀏覽:37
wix安裝包中殺死執行程序命令 瀏覽:312
單片機軟體結構 瀏覽:561
加密大師卸載不了文件 瀏覽:560
新概念英語pdf下載 瀏覽:580
員工把vba加密了 瀏覽:989
博途編譯顯示未組態畫面內部錯誤 瀏覽:820
黑馬游戲怎麼解壓 瀏覽:851
啟動Hadoop的命令 瀏覽:73