align算是老生常谈了:
数据按照某个cache line大小align的话会改进cache效率, 因此默认情况下,编译器会自动把class数据进行align;
class与其member的align尤其自己规则,直接导致:
struct size
... {
uint32 member0;
uint8 member1;
} ;
(sizeof(size) != sizeof(uint32) + sizeof(uint8)) is usually true ;
struct compose_good
... {
uint8 mem0;
uint16 mem1;
uint32 mem2;
} ;
struct compose_bad
... {
uint8 mem0;
uint32 mem1;
uint16 mem2;
} ;
(sizeof(compose_good) < sizeof(compose_bad)) is usually true ;
... {
uint32 member0;
uint8 member1;
} ;
(sizeof(size) != sizeof(uint32) + sizeof(uint8)) is usually true ;
struct compose_good
... {
uint8 mem0;
uint16 mem1;
uint32 mem2;
} ;
struct compose_bad
... {
uint8 mem0;
uint32 mem1;
uint16 mem2;
} ;
(sizeof(compose_good) < sizeof(compose_bad)) is usually true ;
原文链接: http://blog.csdn.net/ccanan/article/details/1569221