sizeof(结构)混乱

时间:2010-06-18 18:03:09

标签: c++ c

在下面的代码中,

#include<stdio.h>
typedef struct {
    int bit1:1;
    int bit3:4;
    int bit4:4;
} node;

int main(){
    node n,n1,n2,ff[10];

    printf("%d\n",sizeof(node));
    return 0;
}

如何预测结构的大小?

6 个答案:

答案 0 :(得分:9)

如果不知道编译器及其编译的目标平台,就无法预测它。

答案 1 :(得分:3)

这取决于平台和编译器设置(打包,对齐,32/64机器)

根据comp.lang.c FAQ list

“比特字段被认为是不可移植的,尽管它们的可移植性不低于语言的其他部分。”

答案 2 :(得分:3)

一般来说不可预测,但实际上它经常会出现sizeof(int)。这通常是4;不太常见2,肯定有8次。

大多数情况下,位字段将被打包,并且大多数情况下int类型将具有9位或更多位存储。

答案 3 :(得分:1)

您会发现结构的大小会根据编译器优化设置而改变。我预测这个结构的位置在2到12个字节之间。

即使像你一样使用位字段,也无法始终预测结构的大小。编译器可能让每个位字段占用int的整个空间,或者可能只占用您指定的1或4位。使用位字段虽然内存存储空间很大,但通常不利于运行时和可执行文件大小。

答案 4 :(得分:0)

通常每个编译器决定如何打包联合,因此您无法对最终大小做出许多假设。他们可以根据参数决定不同的布局。

答案 5 :(得分:0)

添加位字段大小,除以8 * sizeof(int),并取该值的上限。在你的例子中,它将是4。