对齐这种事情不用特别纠结一个通用规则,实际上是很复杂的。
基本原则有几条:
struct Test { int a; char b; short c; }; //sizeof(struct Test) = 8
但不管怎么样,总是有例外的:
struct Test { short a; char b[3]; int c; };
这个结构体的大小是12,看样子是4*3的对齐方式?
不对,用offsetof看一下就知道,3个成员分别占2、6、4字节。
总之,对齐这种事情,知道有这么回事就行了,没必要细究一个放之四海而皆准的规则出来。具体实现是和编译器、平台、位宽等都有关系的。你真想严格按照你的想法去布置内存的话,直接用1对齐,然后自己用unused填空吧。
这个问题透着一股邪乎味儿,怎么看怎么危险啊……
建议专业机构给予支援。