C语言:结构体 联合体

struct test{
char a; //1
int b; //4
long c; //8
void* d; //8
int e; //4
char* f; //8
}
//那么结构体的大小是多少呢
1+4+8+8+4+8=33? 不是

//结构体有对齐问题, 在x64位架构下,结构体是按照8位对齐的
12345678
a -b-- //a =1 , b=4
----c--- //c=8
----d--- //d=8
-e-- //e=4
----f--- //f=8

//内存对齐的好处, 虽然浪费了7字节的内存空间,但是存取速度回更快,这是结构体对齐的基础


union //联合体
union test{
char a; //1
int b; //4
long c; //8
}

12345678
a
bbbb
cccccccc

abc 公用一块内存, 修改a 也会影响b,c,
联合体的大小为最大成员的大小
联合体没有对齐的问题


结构体: 内存不共享,存在对齐问题
结构体: 内存共享, 不存在对齐问题


tags: PHP,PHP7