与8对齐的原因是什么?

new*_*erl 5 c memory-alignment

  struct {              /* Fileheader */
    uchar file_version[4];
    uchar options[2];
    uchar header_length[2];
    uchar state_info_length[2];
    uchar base_info_length[2];
    uchar base_pos[2];
    uchar key_parts[2];         /* Key parts */
    uchar unique_key_parts[2];      /* Key parts + unique parts */
    uchar keys;             /* number of keys in file */
    uchar uniques;          /* number of UNIQUE definitions */
    uchar language;         /* Language for indexes */
    uchar max_block_size_index;     /* max keyblock size */
    uchar fulltext_keys;
    uchar not_used;                     /* To align to 8 */
  } header;
Run Code Online (Sandbox Code Playgroud)

以上是从MySQL源码中提取的,

为什么要费心去做8

Amb*_*ber 6

这是一种优化,可以让CPU更有效地访问内存中的结构.

http://en.wikipedia.org/wiki/Data_structure_alignment

  • @new_perl:看起来他们打算将像`file_version`这样的东西重新解释为int.(例如`int version =(int*)(void*)(file_version)`) (2认同)