C/C++ 語言中結構體的內存分配

 

曾經貼過關於位域的相關文檔,再以一個小例題補充之;

當未用 #pragma 指令指定編譯器的對齊位數時,結構體按最長寬度的數據成員的寬度對齊;當使用了 #pragma 指令指定編譯器的對齊位數時,結構體按最長寬度的數據成員的寬度和 #pragma 指令指定的位數中的較小值對齊。

  #pragma 指令格式如下所示:
  #pragma pack(4)     // 或者 #pragma pack(push, 4)
舉例如下:(機器字長爲 32 位)

  struct
  {
       char a;
  }test;
  printf("%d/n", sizeof test);
打印出來的結果爲 1;
    struct
    {
        char a;
        short b;
        char c;
    }test;
    printf("%d/n", sizeof test);
打印出來的結果爲 6;
    struct
    {
        char a;
        int b;
        char c;
    }test;
    printf("%d/n", sizeof test);
打印出來的結果爲 12;
    struct
    {
        char a;
        double b;
        char c;
    }test;
    printf("%d/n", sizeof test);
打印出來的結果爲 24;
    #pragma pack(4)
    struct
    {
        char a;
        double b;
        char c;
    }test;
    printf("%d/n", sizeof test);
打印出來的結果爲 16;

發佈了53 篇原創文章 · 獲贊 4 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章