首先不考虑设定字节对齐的大小:
首先要找到结构体中或类中最大的变量的大小,比如
struct A
{
char a;
int b;
double c;
};
在计算这个结构体的所占字节大小的时候,首先要获得结构体中最大的所占字节的大小,即double c的大小,即8;在计算最后的大小的时候,要补齐成最大的变量的整数倍,即8的整数倍;
然后就是开始一个一个计算大小了
a 0
b 4~7//因为int变量的大小是4,所以b的内存大小要从该变量所占内存大小的整数倍开始,即4
c 8~15//因为double变量的大小是8,所以从8开始
计算结果是0~15,长度是16,能够被8整除,所以长度是16;
typedef struct AA
{
char a;
int b;
double c;
}strAA;
int main()
{
/*
cout<<sizeof(uint8_t)<<endl;
cout<<sizeof(uint16_t)<<endl;
cout<<sizeof(uint32_t)<<endl;
cout<<sizeof(uint64_t)<<endl;
cout<<sizeof(char*)<<endl;
*/
cout<<sizeof(strAA)<<endl;
getchar();
return 1;
}
输出结果是: