如何打包其中包含位域结构的结构的大小?

问题描述 投票:0回答:1

嗨,我在 C 中定义了以下结构

struct __attribute__((__packed__)) Input {
    enum {
        I_PE_left     = 0, 
        I_PE_up       = 1, 
        I_PE_right    = 2, 
        I_PE_down     = 3,
        I_LSU_left    = 4,
        I_LSU_up      = 5,
        I_LSU_right   = 6,
        I_LSU_down    = 7,
        I_LR_0        = 8,
        I_LR_1        = 9,
        I_LR_2        = 10,
        I_IMMI_0      = 11,
        I_IMMI_1      = 12,
        I_IMMI_2      = 13,
        I_UNUSE       = 15
    } src:4;
};  
struct __attribute__((__packed__)) Instr {
    struct Input inputx;
    struct Input inputy;
    struct Input inputz;
    struct Input inputzz;
};

在上面的例子中,

sizeof(struct Instr)
是 4,这意味着即使是打包的结构也至少需要 1 个字节。

但是,我想将

sizeof(struct Instr)
推入 2 但不知道该怎么做..

c gcc bit-fields
1个回答
2
投票

您不需要将

enum
嵌入到单独的
struct
中。直接使用它,将枚举本身作为位域:

enum Input {
    I_PE_left     = 0, 
    I_PE_up       = 1, 
    I_PE_right    = 2, 
    I_PE_down     = 3,
    I_LSU_left    = 4,
    I_LSU_up      = 5,
    I_LSU_right   = 6,
    I_LSU_down    = 7,
    I_LR_0        = 8,
    I_LR_1        = 9,
    I_LR_2        = 10,
    I_IMMI_0      = 11,
    I_IMMI_1      = 12,
    I_IMMI_2      = 13,
    I_UNUSE       = 15
};

struct Instr {
    enum Input inputx:4;
    enum Input inputy:4;
    enum Input inputz:4;
    enum Input inputzz:4;
};

然后用

-fshort-enums
编译,这将使
enum
类型只占用1个字节。这将为您提供一个 2 字节的结构,而无需打包它。

© www.soinside.com 2019 - 2024. All rights reserved.