【发布时间】:2023-03-25 19:44:02
【问题描述】:
我有两种方法来排列结构中的字段
struct foo {
float a;
double b;
float c;
double d;
short e;
long f;
short g;
long h;
char i;
int j;
char k;
int l;
};
struct foo {
double b;
double d;
long f;
long h;
float a;
float c;
int j;
int l;
short e;
short g;
char i;
char k;
};
应该练习哪一个,为什么?
【问题讨论】:
-
这听起来像家庭作业。我会抛出一个词:填充。我猜你可以弄清楚其余的。
-
A4L,这不是严格意义上的风格/意见问题,因为由于填充,顺序实际上会影响结构所需的总内存和执行速度。不过很大程度上取决于所使用的编译器和标志,并且在大多数情况下影响不大。
-
@A4L 谢谢,以后会记住的!
-
只需为每个变体执行
printf("%d\n", sizeof(struct foo)),您就会知道哪个更好,以及为什么... -
@a4l,我很确定在您选择的语言(似乎是 Java)中同样的问题适用。只是在大多数语言(包括 Java)中,您对程序的看法是如此高级,而您对性能的关注如此之少,以至于您从未听到过有关此类事情的讨论。然而,从处理器的角度来看,填充对缓存的影响和对齐对内存访问的影响与编程语言完全无关。
标签: c performance structure