这里结合联盟的目的是什么?

时间:2015-12-23 10:33:49

标签: c linux-kernel

typedef struct {
    union {
        u32 slock;
        struct __raw_tickets {
#ifdef __ARMEB__
            u16 next;
            u16 owner;
#else
            u16 owner;
            u16 next;
#endif
        } tickets;
    };                                                                                                                                  
} arch_spinlock_t;

上面是Linux内核的代码片段,将整个联合放入结构的目的是什么,为什么不简单地联合呢?

这是源代码的link

2 个答案:

答案 0 :(得分:1)

Linux内核是一项正在进行的工作,而不是“应该如何完成”#34;的事情。

我相信这背后没有真正的理由,除了习惯将sheet.ensureRowCount(row); 中的所有内容打包在顶层。如果您曾经想过"一切都是struct",您可能会因为向实际的struct添加一些新字段而不是union而意外失败,正如你所料。

答案 1 :(得分:0)

如果我想要有几个彼此相似但不完全相同的结构 - 它们有许多共同的元素,但后来变化了。一个例子可能是在商店出售的一系列产品,其中一些商品以int单位出售(我将卖给你一两辆摩托车,但不是1.5),而其他的则以浮动单位出售(kgs)例如,苹果?

联盟允许您在一个集合中并行地定义许多不同类型和大小的不同变量,即共享相同的内存。

小心使用,结构中的联合可用于生成一个集合,该集合可以处理一系列略有不同的数据类型,例如摩托车和苹果。

C&#39的工会允许你定义一个内存块,它有两个(或更多)与之关联的名称,这样当与结构相结合时,你可以根据一个共同的核心生成一整套已定义的变量类型,但随后在适当的地方改变。

编辑:添加示例

typedef union {
    int units;
    float kgs;
} amount ;

typedef struct {
    char selling[15];
    float unitprice;
    int unittype;
    amount howmuch;
} product;