#include<iostream>
using namespace std;
typedef unsigned char u8;
typedef struct {
int ival; //4
short int sval[2]; //4 * 2 = 8
long long lval; //8
char cVal; //1
}tMsg;
tMsg tmp = { 0, {1,2}, 0, '1'};
int main()
{
u8* p = (u8*)&tmp;
int i = 0;
while (*p != '1')
{
p++;
i++;
}
cout << i + 1 << endl; //加上最后一个char的大小
//cout << sizeof(tmp.ival) << endl;
//cout << sizeof(tmp.sval[0]) * 2 << endl;
//cout << sizeof(tmp.lval) << endl;
//cout << sizeof(tmp.cVal) << endl;
cout << sizeof(tmp) << endl;
return 0;
}
因为struct没有边界可以用来判断,所以将最后一字节的值作为边界。
实际上,用指针量出来所占的内存的大小与sizeof的有出入,应该是结构体对齐的结果。
char在内存中占了1byte,可能是ide的原因,用sizeof时,char被扩展成了4byte