Bri*_*aro 2 c optimization cpu-architecture
我有一个结构我想优化足迹.
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;
Run Code Online (Sandbox Code Playgroud)
据我了解,编译器在您定义内存时会在内存中创建结构.因此应首先声明较大的类型,以便小类型可以填充对齐孔.
我已经阅读了有关数据结构一致性的WikiPedia文章以及有关该问题的其他文章. http://en.wikipedia.org/wiki/Data_structure_alignment
但我仍然不确定,我目前的订购是最优的还是我错过了什么?
注意:我的编译器不支持"#pragma pack"
不,这应该是基于通用编译器行为的最佳顺序(请记住,标准实际上不会强制关于元素之间的空间如何打包结构,尽管它确保顺序是指定的:请参阅'6.2.5类型'最新草案C1x-n1425).
你的所有指针都在前面,你的所有字符都在后面,所以你可能会发现,使用四字节指针大小,你最终会得到一个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));
Run Code Online (Sandbox Code Playgroud)
我已经把原因全部的sizeof检查是为了确保你有充分的信息.我很清楚,sizeof(char)总是1.