Draem 发表于 2020-4-6 22:35:34

c 位域所占内存空间大小

结构体Text内元素所占内存不应该是四位码?为啥sizeof(text) = 4;单位变成了字节?

#include<stdio.h>
int main(void)
{
        struct Text
        {
                unsigned int a:1;
                unsigned int b:1;
                unsigned int c:2;
        };
        struct Text text;
        text.a = 1;
        text.b = 0;
        text.c = 2;
        printf("sizeof text = %d",sizeof(text));
        return 0;
       
}

大肥侃子 发表于 2020-4-7 08:25:35


https://fishc.com.cn/forum.php?mod=viewthread&tid=83418&extra=page%3D2%26filter%3Dtypeid%26typeid%3D571

4goodworld 发表于 2020-4-7 08:58:22

我觉得这个解释蛮好的:不够一个类型的size时,将按其中最大的那个类型对齐。
参考地址:
https://www.cnblogs.com/balingybj/p/4780358.html

编程鱼C 发表于 2020-4-7 09:26:36

Draem 发表于 2020-4-7 11:16:49

内存中一般除char外,其余类型例如整形,浮点,都需要内存对齐。
char a;int b;需要a内存分配之后填充三个字节向后对齐,原因应该是内存地址顺序分配,前面都已经尽量保证内存分配对齐(结构体等最大类型尾填充),另外这也应该是内存顺序分配的一个佐证吧。
页: [1]
查看完整版本: c 位域所占内存空间大小