结构大小优化

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"

pax*_*blo 5

不,这应该是基于通用编译器行为的最佳顺序(请记住,标准实际上不会强制关于元素之间的空间如何打包结构,尽管它确保顺序是指定的:请参阅'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.

  • 该标准确实要求将字段按其声明的顺序放置. (3认同)
  • 相信这个人在包装问题上,因为他的名字叫"pack-diablo"! (2认同)