C 中的结构对齐优化

问题描述 投票:0回答:1
#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 gcc struct sizeof
1个回答
0
投票

是否有任何编译器设置可以对这些声明进行最佳重新排序(以获得最小结构大小)?

不。 C 允许程序依赖结构成员顺序并对结构成员顺序敏感。编译器不能随意重新排序结构成员。

确保最佳对齐的一些一般实践规则是什么

一般来说,您可以通过降低对齐要求来对成员进行排序,从而最大限度地减少结构布局中的填充。

许多编译器还提供扩展,使您能够减少或消除结构填充,但可能会因成员访问不对齐而降低性能。然而,这些扩展不能跨编译器移植,并且在未对齐的访问会产生硬错误而不仅仅是性能损失的平台上,它们没有实际意义。

© www.soinside.com 2019 - 2024. All rights reserved.