初識位元組對齊

2021-06-17 16:38:48 字數 990 閱讀 9045

今天寫程式的時候遇到乙個小難題,如何記錄下64個裝置的有無動作的表示,我想到了節省資源的位域,寫下如下的程式(32位pc下)

typedef struct

new_log_t;

sizeof(new_log_t) = 4,似乎沒有節省資源嗎,再試

typedef struct

new_log_t;

sizeof(new_log_t) = 4,似乎了解什麼了,再試

typedef struct

new_log_t;

sizeof(new_log_t) = 8 ,看一看只有32個成員時候佔多少吧

typedef struct

new_log_t;

sizeof(new_log_t) = 4,我明白了,則

typedef struct

new_log_t;

我猜sizeof後是8個位元組,sizeof後果然是 8

我的pc 結構體是4個位元組對齊的,那我如何才能讓它1個位元組對齊,達到我的要求以節省資源呢,使用如下語句

#pragma pack(push, 1)

結構體{}

#pragma pack(pop)

示例

#pragma pack(push, 1) //效果開始

typedef struct

new_log_t;

#pragma pack(pop) //效果結束(其他的沒有被這個命令包著的結構體(至少乙個成員)sizeof後是4)

sizeof(new_log_t) = 1,看來精度只能是1個位元組了(以後再看看有沒有使精度更高的寫法)

後記:以前一直聽位元組對齊位元組對齊,不過聽歸聽,只有自己的的確確遇到了這類問題才能深刻理解,結合者需求去看,去理解,才能加深理解,達到事半功倍的效果

謝謝觀賞!

初識字串

什麼是字串?字串就是有限個字元的序列,比如 this is a string 關於字串的表達方式,有三種,包括 以三個雙引號或單引號開頭的字串可以折行 比如 s3 可以隨便跨行,通過使用 是轉義符,用來表達原本的意思,比如 print 也可以通過 八進位制或者十六進製制數以及unicode編碼來表示...

位元組順序 位元組對齊

一.位元組順序的產生 在計算機中,資料是以位元組為單位存放的,而c語言中只有char才是乙個位元組,其他如int,float都是大於乙個位元組,所以就存在將資料按怎樣的順序存放的問題。一般有大端序和小端序兩種方式,特殊的還有混合序,也就是兩種存放方式同時存在於乙個計算機系統中。上面講的都是主機位元組...

位元組順序 位元組對齊

一.位元組順序的產生 在計算機中,資料是以位元組為單位存放的,而c語言中只有char才是乙個位元組,其他如int,float都是大於乙個位元組,所以就存在將資料按怎樣的順序存放的問題。一般有大端序和小端序兩種方式,特殊的還有混合序,也就是兩種存放方式同時存在於乙個計算機系統中。上面講的都是主機位元組...