C中的力特定结构尺寸

由于各种原因,我有一些结构我想强制为特定大小(在这种情况下为64字节和512字节)。 然而,两者都低于我希望它们的尺寸。

反正我是否告诉编译器将它们设置为这些特定的大小并用零填充,或者我最好只是在结构中声明构成多余空间的数组,以便它与我想要的大小对齐?

你可以使用联盟。

 struct mystruct_s { ... /* who knows how long */ }; typedef union { struct mystruct_s s; unsigned char padding[512]; } mystruct; 

这将确保联合为512字节或更多。 然后,您可以在代码中的某处使用静态断言确保它不超过512个字节:

 /* Causes a compiler error if sizeof(mystruct) != 512 */ char array[sizeof(mystruct) != 512 ? -1 : 1]; 

如果您使用的是C11,则可以采用更好的方法。 我不认识任何使用C11的人。 该标准于几周前发布。

 _Static_assert(sizeof(mystruct) == 512, "mystruct must be 512 bytes"); 

请注意,填充的唯一方法是手动将零( callocmemset )放在那里。 编译器忽略填充字节。

我不认为有任何方法可以自动化,至少在我使用的编译器gcc中。 你必须填补你的结构。

注意结构中变量的自动对齐 。 例如struct example {char a; int b; }

不占用5个字节,而是8个字节。