#include <stdio.h>
struct X
{
short s;
int i;
char c;
};
struct Y
{
int i;
char c;
short s;
};
struct Z
{
int i;
short s;
char c;
};
int main() {
printf("%lu %lu %lu\n", sizeof(struct X), sizeof(struct Y), sizeof(struct Z));
return 0;
}
以上代码返回
12 8 8
证明结构的对齐取决于其成员的声明顺序。 是否有任何编译器设置可以对这些声明进行最佳重新排序(以获得最小结构大小)?确保随着项目规模的最佳调整有哪些一般实践规则?
是否有任何编译器设置可以对这些声明进行最佳重新排序(以获得最小结构大小)?
不。 C 允许程序依赖结构成员顺序并对结构成员顺序敏感。编译器不能随意重新排序结构成员。
确保最佳对齐的一些一般实践规则是什么
一般来说,您可以通过降低对齐要求来对成员进行排序,从而最大限度地减少结构布局中的填充。
许多编译器还提供扩展,使您能够减少或消除结构填充,但可能会因成员访问不对齐而降低性能。然而,这些扩展不能跨编译器移植,并且在未对齐的访问会产生硬错误而不仅仅是性能损失的平台上,它们没有实际意义。