做班级网站的素材,wordpress前台403,代理网点什么意思,织梦做商城类网站教程二#xff1a; #xff08;1#xff09;sizeof也可以对一个函数调用求值#xff0c;其结果是函数返回类型的大小#xff0c;函数并不会被调用。 #xff08;2#xff09;终于搞懂struct结构体内存分配问题了#xff0c;结构体中各个成员字节对齐遵循以下几个原则#…二 1sizeof也可以对一个函数调用求值其结果是函数返回类型的大小函数并不会被调用。 2终于搞懂struct结构体内存分配问题了结构体中各个成员字节对齐遵循以下几个原则 直接用下面几个原则即可判断结构体的大小 1.结构体每个成员相对于结构体首地址的偏移量offset都是这个成员大小的整数倍如有需要编译器会在成员之间加上填充字节internaladding 例如有以下一个结构体 structex {
int i;
char t;
int n;
} 第1个成员偏移量为0是int型成员大小4假设这太机器的整型长度占4个字节的整数倍。 第2个成员t为char型他的大小为1首先假设在成员i和t之间没有填充字节由于i是整型占4个字节那么在没有填充之前第2个成员t相对于结构体的偏移量为4他是t成员大小1的4倍符合此条件所以系统在给结构体第2个成员分配内存时不会在i和t之间填充字节以到达对齐的目的。 当分配结构体第3个成员n时首先发现是一个整型数据大小为4没有填充之前n相对于结构体首地址偏移量为前面2个成员填充字节5所以当系统发现5不是4成员大小的整数倍时会在成员t之后或者说n之前填充3个字节以使n的偏移量到达8而成为4的整数倍。这样这个结构体占用内存情况暂时为4134。 2.结构体的总大小为结构体最宽基本类型成员大小的整数倍如有需要编译器会在最末一个成员之后加上填充字节trailingpadding。 上面的结构体内存分配以后还要看是否满足此条件假设在最末一个成员之后不需填充字节数那么这个结构体的大小为12。而ex结构体中最宽基本类型成员为int大小为412为4的整数倍所以无须再在最末一个成员之后加上填充字节了。所以sizeof(ex)12; 如果一个结构体如下所示 struc tex1{
int i;
char t;
int n;
char add;
} 那么sizeof(ex1)16;原因就是在最后一个成员之后填充了3个字节。 3.还有一个额外的条件结构体变量的首地址能够被其最宽基本类型成员的大小所整除 4.对于结构体成员属性中包含结构体变量的复合型结构体再确定最宽基本类型成员时应当包括复合类型成员的子成员。但在确定复合类型成员的偏移位置时则是将复合类型作为整体看待。 5总结出一个公式结构体的大小等于最后一个成员的偏移量加上其大小再加上末尾的填充字节数目即 sizeof( struct ) offsetof( last item ) sizeof( last item ) sizeof( trailing padding )转载于:https://www.cnblogs.com/qdrs/p/7705385.html