这是因为字节对齐原则,在Linux下其是按2字节对齐,可是在VC++下默认是按8字节对齐,必须满足4的整数倍。这样有助于存储效率。第一个char 为1字节,int为4字节,由于8字节对齐原则系统会预留出3个字节,保证8个字节对齐。而第二个两个char 2个字节,1个int4字节,系统补充2个字节后,此时8个字节,再加一个Int为12.满足条件
struct stOne // 结构体1
{
char c1;
int i1;
char c2;
int i2;
};
struct stTwo // 结构体2
{
char c1;
char c2;
int i1;
int i2;
};
各位大侠,上面两个结构体因为硬件的边界调整原则,占用内存大小并不相同。在我的电脑上,sizeof(struct stOne)是16,sizeof(struct stTwo)是12。
是不是 1 + 4 +(3字节对齐) = 8 2+ (2字节对齐) = 4 所以是 12
还有 union 是以最大的 为 空间 如果没有对其他地点进行初始化的话 回是垃圾值。 以我本人看 我这个是小端模式 大端模式的话 大数据存小地址。所以我这个是小端模式 大地之村大数据所以得出0
---------------------------我的天空里没有太阳,总是黑夜,但并不暗,因为有东西代替了太阳。虽然没有太阳那么明亮,但对我来说已经足够。凭借着这份光,我便能把黑夜当成白天。我从来就没有太阳,所以不怕失去。
--------《白夜行》