为什么sizeofnoname不等于各个字符长度相加?

如图所示:

img


为什么sizeofnoname不等于各个字符(char char* int short)长度相加?
64位运行的。
char 1
char* 8
int 4
short 2

struct noname 
{
    char c;//
    int n;
    short k;
    char*p;
};
正常情况下,c占1个字节,n占4个字节,k占2个字节,p占8个字节(64位情况下)
但是,结构体分配内存的时候存在内存补齐的现象。
1/4/2/8最大是8,按照8的倍数补齐。
同时为了节约内存,能凑齐4的倍数的尽量凑整
所以c额外补齐1位,占2个字节,n不变,k不变,这样c/n/k正好组成8个字节,所以noname的大小就是16个字节

因为要对齐,比如,4字节的变量,要对齐四字节整数倍的地址。你来排一下吧!