我有一个结构,我想优化其足迹。
typedef struct dbentry_s {
struct dbentry_s* t_next;
struct dbentry_s* a_next;
char *t;
char *a;
unsigned char feild_m;
unsigned char feild_s;
unsigned char feild_other;
} dbentry;
据我了解,编译器会在您定义结构时在内存中创建它们。 因此,应首先声明较大的类型,以便较小的类型可以填充对齐孔。
我已阅读有关数据结构对齐的维基百科文章和其他有关该问题的文章。 http://en.wikipedia.org/wiki/Data_structure_alignment
但我仍然不确定,我当前的顺序是最优的还是我遗漏了什么?
注意:我的编译器不支持“#pragma pack”
最佳答案
不,这应该是基于常见编译器行为的最佳顺序(请记住,该标准实际上并没有规定如何根据元素之间的空间来打包结构,尽管它确实保证了顺序指定:参见最新草案 C1x-n1425 的“6.2.5 类型”。
所有的指针都在前面,所有的字符都在后面,所以您可能会发现,对于四字节的指针大小,您最终会得到一个 19 或 20 字节的结构。
您可以通过在代码中插入以下几行来轻松地检查这一点:
printf ("Size of dbentry* is %d\n", sizeof (struct dbentry_s*));
printf ("Size of char* is %d\n", sizeof (char*));
printf ("Size of uns char is %d\n", sizeof (unsigned char));
printf ("Size of stucture is %d\n", sizeof (dbentry));
我在 all sizeof
检查中加入的原因是为了确保您拥有完整的信息。我很清楚 sizeof(char)
始终为 1。
关于c - 结构大小优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1935392/