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

熱點內容
新概念英語pdf下載 瀏覽:579
員工把vba加密了 瀏覽:988
博途編譯顯示未組態畫面內部錯誤 瀏覽:819
黑馬游戲怎麼解壓 瀏覽:850
啟動Hadoop的命令 瀏覽:72
程序的編輯編譯和運行 瀏覽:36
中國開源編譯器 瀏覽:831
伺服器流量10t是什麼意思 瀏覽:605
如何查區域網伺服器地址 瀏覽:766
韋小寶程序員視頻 瀏覽:780
安卓手機錄音失敗怎麼設置 瀏覽:798
dell伺服器r720如何進入pe 瀏覽:201
國外軟體的伺服器地址 瀏覽:521
phpsign函數 瀏覽:946
分頁演算法實現代碼 瀏覽:553
怎麼把ios系統的app轉到安卓 瀏覽:419
我的世界手機版命令方塊指令大全 瀏覽:357
迅雷怎樣解壓文檔 瀏覽:439
濟南兒童編程 瀏覽:259
平鋪文件夾怎麼鎖定 瀏覽:328