为什么工会适合C中的低级系统编程?

时间:2011-09-07 07:51:16

标签: c unions

在C的一本教科书中,我已经读过,在低级系统编程方面,工会非常有用。我想知道为什么会这样?

为什么工会会成为低级系统编程的好选择?

7 个答案:

答案 0 :(得分:4)

那么,你的教科书应该解释它的含义 - 我们只能猜测它的意图。

然而,我在os-drivers等中看到的一个用途是将设备的硬件寄存器映射到多个视图。因此,如果IO设备具有由字表示的io地址,则可能需要寻址整个字或高阶字节等。

虽然你可以通过指针和投射它们来做到这一点,但一个更清晰的方法就是拥有

的联合
  union {
      unsigned short word;
      struct {
           unsigned char high;
           unsigned char low;
      } byte;
   };

现在允许通过word等处理整个byte.high或部分内容。

然而,union不是struct的替代或替代 - 它们用于不同的目的 - 而可能具有相同内存的不同视图。

答案 1 :(得分:2)

union允许您使用不同的类型,但实际上只能使用其中一种类型。因此,如果您处于受限制的环境中,那么这可能很有用。

另一方面,struct将为其中的所有类型保留内存,这意味着您正在使用更多内存,尽管您现在可以使用struct

那一个必然比另一个更好,我不知道这是一个正确的陈述。它们有两个不同的用途。

答案 2 :(得分:1)

工会和结构是两种不同的结构。说一个比另一个好,这是无稽之谈。

菠萝比游泳哲学更好吗?

答案 3 :(得分:1)

如上所述:unionstruct不能达到同样的目的。

如果要进行字节操作,联合会很有用,例如:

union {
   int i;
   char pi[4];
}

您可以轻松访问变量i的某些字节而无需执行难度转换,这在低级编程中非常常见。

答案 4 :(得分:0)

工会&结构在不同的情况下用于不同的目的。你永远不能用联合代替结构和反之亦然 为了更好的理解,结构和工会的规范

答案 5 :(得分:0)

您遇到的每个struct可能会遇到10-100 union次。

两个(structunion s)是相关的,但他们做不同的工作。当您需要在不同时间在单个空间单元中存储不同的值时,可以使用联合来节省空间。结构通常更有用;它收集了许多需要一起存储和访问的值(并且不能共享空间)。

是的,union在低级编程中很有用。也可以struct。两者都不比另一个好,因为他们做不同的工作。当您需要union时,无法使用struct。你可以在不使用union的情况下生存,但是当它们有用时,union非常有用。

如果只能选择使用其中一种,我选择每次都能使用struct

答案 6 :(得分:0)

这是错误的 - 你不能改变工会的结构。不同之处在于内存使用情况。在结构中,所有变量都占用内存中的分隔位置所以结构的大小是它的变量之和(通常是+填充)。

另一方面,联合与其最大变量一样大,所有变量都驻留在内存中的一个位置,因此修改一个变量会更改联合中其他变量的内容。