在C的一本教科书中,我已经读过,在低级系统编程方面,工会非常有用。我想知道为什么会这样?
为什么工会会成为低级系统编程的好选择?
答案 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)
如上所述:union
和struct
不能达到同样的目的。
如果要进行字节操作,联合会很有用,例如:
union {
int i;
char pi[4];
}
您可以轻松访问变量i
的某些字节而无需执行难度转换,这在低级编程中非常常见。
答案 4 :(得分:0)
工会&结构在不同的情况下用于不同的目的。你永远不能用联合代替结构和反之亦然 为了更好的理解,结构和工会的规范
答案 5 :(得分:0)
您遇到的每个struct
可能会遇到10-100 union
次。
两个(struct
和union
s)是相关的,但他们做不同的工作。当您需要在不同时间在单个空间单元中存储不同的值时,可以使用联合来节省空间。结构通常更有用;它收集了许多需要一起存储和访问的值(并且不能共享空间)。
是的,union
在低级编程中很有用。也可以struct
。两者都不比另一个好,因为他们做不同的工作。当您需要union
时,无法使用struct
。你可以在不使用union
的情况下生存,但是当它们有用时,union
非常有用。
如果只能选择使用其中一种,我选择每次都能使用struct
。
答案 6 :(得分:0)
这是错误的 - 你不能改变工会的结构。不同之处在于内存使用情况。在结构中,所有变量都占用内存中的分隔位置所以结构的大小是它的变量之和(通常是+填充)。
另一方面,联合与其最大变量一样大,所有变量都驻留在内存中的一个位置,因此修改一个变量会更改联合中其他变量的内容。