2012-08-06 63 views
-1

我有兩種結構:賽靈思Microblaze的結構填充/包裝

Struct _size1 { 
    union{ 
      short a; 
      struct { 
        char b; 
        char c; 
      }d; 
      struct { 
        char x; 
        char y; 
      }z; 
    }; 

    union{ 
      short a1; 
      struct { 
        char b1; 
        char c1; 
      }d1; 
      struct { 
        char x1; 
        char y1; 
      }z1; 
     }; 
}size1; 

和:

Struct _size2 { 
    short num; //2 bytes 
    short num2; //2 bytes 
    short num3; //2 bytes 
    size1 st_size; //4 bytes 

}size2; 

的的sizeof(尺寸1)= 4; sizeof(size2)= 12;

我想要獲得的尺寸是10尺寸2。

它添加NUM3和st_size之間的兩個字節填充.. Microblaze的編譯器不支持附註包

我想使用屬性((包裝)),但都沒有成功...

Struct _size2 { 
    short num; //2 bytes 
    short num2; //2 bytes 
    short num3; //2 bytes 
    size1 st_size; //4 bytes 

}size2 __attribute__((packed)); 

我不知道什麼是錯的,或者如果這甚至可以這樣工作。

由於

回答

1

您正在使用unsigned int位字段類型這是對GCC/Microblaze的4個字節。

使用gcc實現定義的unsigned short位字段類型與gcc/Microblaze具有2個字節的大小。