消息关闭
    暂无新消息!

c语言 内存对其问题

问题作者 : Cobbold2017-07-31发布
struct data1 {
        char a;
        short b;
        char c;
        int d;
};

struct data2 {
        char a;
        char b;
        short c;
        int d;
};

哪位大神解释下,为什么sizeof(struct data1)是12,而sizeof(data2)是8 ? 谢谢

3个回答

︿ 2
short是二字节对齐,int是四字节对齐

struct data1 {
        char a;
        short b;
        char c;
        int d;
};
data1:a一字节|空一个字节|b两个字节|c一字节|空三个字节|d四字节

struct data2 {
        char a;
        char b;
        short c;
        int d;
};
data2:a一字节|b一字节|c两字节|d四字节
︿ 1
每个变量相对于起始位置的偏移量必须是该变量类型大小的整数倍,不是整数倍空出内存,直到偏移量是整数倍为止。

最后整个结构体的大小必须是里面变量类型最大值的整数倍。
︿ 0
一楼说的很好,结构体data1,因为内存对齐,会自动补充,第二个是自动对齐,没有补充。


#include<stdio.h>

struct data1 {
char a;
char x1;
short b;
char c;
char x2;
char x3;
char x4;
int d;
};

struct data2 {
char a;
char b;
short c;
int d;
};
void main()
{
printf("%d\n",sizeof(data1));
printf("%d\n",sizeof(data2));
}