2012-03-12 61 views
0

林不 “即” 新的C,但可以有一个人请赐教在这一个:的sizeof结构的sizeof VS型

printf("%d %d\n", sizeof(int), sizeof(unsigned char)); 

打印预期4和1

typedef struct 
{ 
    int a; 
    unsigned char b; 
} test 

printf("%d\n", sizeof(test)); 

打印8 ...我真的很困惑!

+2

http://en.wikipedia.org/wiki/Data_structure_alignment#Data_structure_padding – Mysticial 2012-03-12 00:45:12

回答

1

其称为 “alignment”。您的struct已填充。你可以在“pack”它(不同的编译器有不同的定义方式哪种类型应包装),然后它不会被对齐,但你可能有运行时的数据访问的问题。

+0

你会推荐总是在1个字节的包数据,以优化尺寸或使用性能的目的,编译器默认? – McBob 2012-03-12 00:58:39

+0

@McBob,不,恰恰相反,从来不收拾,除非你确信你需要它,你知道你在做什么。编译器使用的系统默认值在被忽略时可能会降低性能,并在某些系统上导致崩溃。 – littleadv 2012-03-12 01:07:18

+0

林上的网络协议,并且每个协议命令的报头大小的工作应该是静态的,在这种情况下,我应该确保该尺寸将保持不变上的每个平台正确?所以在这种情况下,我应该使用正确的标题结构包装? – McBob 2012-03-12 01:15:34