在下面的一段代码,的sizeof(结构)混淆
#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;
}
如何预测结构的大小?
在下面的一段代码,的sizeof(结构)混淆
#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;
}
如何预测结构的大小?
如果不知道编译器和编译的目标平台,就无法预测它。
通常,每个编译器都会决定如何打包联合,因此无法对最终大小做出很多假设。他们可以根据参数决定不同的布局。
奇怪的引用是什么...... – jalf 2010-06-19 03:07:19
你会发现你的结构的大小根据编译器优化设置而改变。我预测这个结构在2到12个字节之间。
即使使用像你这样的位域,你也不能总是预测结构的大小是什么。编译器可能会让每个位字段占用int的全部空间,或者可能只是您指定的1或4位。使用位字段虽然在内存存储空间上很好,但对于运行时间和可执行文件大小通常不利。
一般来说是不可预测的,但实际上它会经常出现sizeof(int)。其本身往往是4;不常见2,有时8。
大多数情况下位字段将被打包,大多数情况下int类型将有9位或更多位的存储空间。
int总是至少为16位,标准是这样说的(long总是至少为32,而在C99中我们得到的long long至少是64,并且它们都可以大于这些大小) – Spudd86 2010-06-19 01:01:35
为什么你认为你应该能够准确地预测它? – 2010-06-18 18:12:43
你为什么想要? – 2010-06-18 18:22:09