打包在 C C 中的結構體定義中的作用是什麼?

發布 科技 2024-08-09
7個回答
  1. 匿名使用者2024-01-31

    Packed 表示位元組對齊。

    例如,int float double char 的總大小為 4 + 4 + 8 + 1 = 17

    但是如果你不使用 packed,系統會以預設的方式對齊 zhidao(假設 4 個位元組),那麼它將佔 4 + 4 + 8 + 4 = 20;(少於 4 個位元組將填充 4 個位元組)。

    每個硬體平台處理儲存空間的方式都非常不同。 某些平台只能從某些位址訪問某些型別的資料。 例如,如果某些架構的 CPU 在訪問未對齊的變數時出錯,則程式設計必須確保該架構中的位元組對齊。

    其他平台可能並非如此,但最常見的是資料儲存不符合適合它們的平台要求,導致訪問效率下降。

  2. 匿名使用者2024-01-30

    你不必考慮它,你無法弄清楚。

    Packed 表示位元組對齊。

    例如,int float double char 的總大小為 4 + 4 + 8 + 1 = 17

    但是如果你不使用 packed,系統將預設對齊(假設 4 個位元組),因此它將佔 4 + 4 + 8 + 4 = 20;(少於 4 個位元組將填充 4 個位元組)。

    但是在VS2008中不能使用上述方法(我還沒有嘗試過早期版本),如果要設定對齊方式,只需選擇專案屬性-配置屬性-C C++-**生成即可設定,其選項是。 在 gcc 下, 你可以新增 pragma pack(4) 來表示 4 位元組對齊的意思, 其他的也是如此。

  3. 匿名使用者2024-01-29

    對於記憶體對齊,有些地方會根據一定長度來處理記憶體,如果你的結構恰好是最小單位的整數倍,你可以使用這個函式來宣告自動對齊,不足也是乙個佔位符。

  4. 匿名使用者2024-01-28

    如果編譯不通過,這首先要看你的編譯器是否支援,如果支援,不同編譯器的格式也有些不同,你要看編譯器的文件是如何定義和使用的。

    一般有這樣的。

    typedef __packed struck test_s

    test_t;

    還有這種事情。

    typedef struck __attribute__(packed)) test_s

    test_t;

    實際上,packed or attribute (packed) 關鍵字的目的是在打包資料時將其與 1 對齊,例如,當您使用它來修改結構或聯合時,這些成員之間就沒有間隙了。 如果未新增,則結構或聯合將按其自然對齊方式對齊。 例如,乙個 CPU 架構的編譯器預設對齊方式是 4,int 的大小也是 4,char 的大小是 1,所以是相似的。

    typedef __packed struck test_s

    char a;

    int b;

    test_t;

    以這種方式定義的結構的大小為 8 個位元組。

    如果新增 packed,大小將變為 5 個位元組,並且兩者之間沒有間隙。

  5. 匿名使用者2024-01-27

    這是 C++ 的語言擴充套件。

    您需要參考相應的編譯器文件才能理解。

    我在 VisualC++ 中沒有這種語法。

  6. 匿名使用者2024-01-26

    無論這是否是標準的,它都是由編譯器定義的。

  7. 匿名使用者2024-01-25

    我不知道這篇文章對你是否有用。

相關回答
12個回答2024-08-09

滿意的答案null6 level2010-12-10你是想簡單地刪除,還是取消這個結構體的這個專案 後續問題:刪除所有儲存在結構體中的資料 答:如果是int型,我們一般等於0 如果是指標型,一般指向nullstruct add; main() 但這樣做似乎沒什麼意思,你能告訴我你想做什麼嗎? >>>More

6個回答2024-08-09

C語言結構定義:struct是結構關鍵字,tag是結構的符號,member-list是結構成員的列表,它必須列出它的所有成員; variable-list 是此結構宣告的變數。 >>>More

9個回答2024-08-09

PIR1Bits 不是結構名稱。 typedef 定義型別的別名。

5個回答2024-08-09

原因:因為你沒有在結構的末尾新增; ,那麼說明你的結構定義還沒有結束,那麼下面的主要功能就是你的結構了,所以會上報"定義中的型別過多"錯。 >>>More

18個回答2024-08-09

因為你是乙個聯盟,所以它在記憶體中一次只能容納乙個成員,社群占用的記憶長度等於最長成員的長度。 這裡社群占用兩個位元組(乙個字元占用乙個位元組); >>>More