2011-03-27 31 views
4
struct Dummy { 
    int x; 
    char y; 
}; 

int main() { 
    struct Dummy dum; 
    dum.x = 10; 
    dum.y = 'a'; 
} 

如何将结构成员的小端机器上的布局?结构成员如何存储在小型机器上?

难道是这样的?

0x1000 +0 +1 +2 +3 
     ___________________ 
    x: | 10 | 0 | 0 | 0 |  
     -------------------  
    y: | 'a'| 0 | 0 | 0 | 
     ------------------- 
    0x1000 +4 +5 +6 +7 
+1

这相当依赖编译器。我们不仅处理结构对齐和填充,还处理非固定宽度的数据类型。 – 2011-03-27 15:15:13

回答

6

我想你会发现this question有用。永久性通常与记忆中的一个词相关,而不是整个结构。

4

结构布局是受默认打包影响的编译器实现细节。字节顺序通常仅影响结构成员值中字节的顺序,而不影响布局。检查编译器手册中的小字体,或使用sizeof和offsetof宏进行试验。

你在你的问题中记录的布局的确是一个32位的LE编译器很常见。

1

结构成员将在顺序声明的,与填充插入作为必要的,这样,每个字段为它的类型和在端部插入作为必要的填充适当地对准,使得在阵列中的每个后续结构正确地对准,并开始紧接着前一个结构的结束。也可能(但不太可能)在任何两个元素之间或末尾添加不必要的填充。

每个字段本身将被存储为适合于编译器和体系结构,例如类型int 10将作为字节0a 00 00 00存储在一个32位整数的普通小端机上。