结构的联合只有位字段,sizeof函数加倍字节,C

问题描述 投票:3回答:4

由于某些原因,我无法弄清楚我的包含位字段的结构的联合是设置两倍于任何单个结构所需的字节数。

#include <stdio.h>
#include <stdlib.h>

union instructionSet {
    struct Brane{
        unsigned int opcode: 4;
        unsigned int address: 12;
    } brane;
    struct Cmp{
        unsigned int opcode: 4;
        unsigned int blank: 1;
        unsigned int rsvd: 3;
        unsigned char letter: 8;
    } cmp;
    struct {
        unsigned int rsvd: 16;
    } reserved;
};

int main() {

    union instructionSet IR;// = (union instructionSet*)calloc(1, 2);

    printf("size of union %ld\n", sizeof(union instructionSet));
    printf("size of reserved %ld\n", sizeof(IR.reserved));
    printf("size of brane %ld\n", sizeof(IR.brane));
    printf("size of brane %ld\n", sizeof(IR.cmp));


    return 0;
}

所有对sizeof的调用返回4然而据我所知,他们应该返回2。

c struct union sizeof
4个回答
© www.soinside.com 2019 - 2024. All rights reserved.