在位域结构中,控制器读取的是整个值还是特定的字节

问题描述 投票:1回答:1
struct abc
{
    uint32 total;
    union
    {
        uint32 a:8;
        uint32 b:8;
        uint32 c:16;
    }
}

如果我更新或读取“ abc.b”,则控制器将读取整个32位并更新特定字节,还是直接读取并更新该字节?

c
1个回答
0
投票

C标准不控制如何访问内存,除了将对象声明为原子外,还施加了一些约束。通常使用字节,字或其他大小的内存访问来访问位字段还是对象,这完全取决于C实现(主要是编译器)和目标计算机。如果您对特定系统有疑问,则需要专门识别它,包括目标硬件,目标操作系统和所使用的C实现。

如果您尝试了问题中显示的代码,但没有看到预期的结果,则可能是因为您在union而不是struct中声明了位字段。在union中声明成员会导致它们在内存中重叠; uint32 a:8uint32 b:8将指代相同的8位,uint32 c:16将使它们重叠。要单独布置它们,而不是重叠布置,请将union更改为struct

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