请教linux下gcc下内存对齐的原则
我有以下代码
#include <stdio.h>
//#pragma pack(4)
typedef struct Test_Struct
{
double d_var;
char c_var1;
short s_var;
char c_var2;
} Test_Struct;
int main()
{
Test_Struct test_struct;
double *p_d = &test_struct.d_var;
char *p_c1 = &test_struct.c_var1;
short *p_s = &test_struct.s_var;
char *p_c2 = &test_struct.c_var2;
printf("test_structのサイズは:%d\n",sizeof(test_struct));
printf("d_varの位置:%d\n",p_d);
printf("c_var1の位置:%d\n",p_c1);
printf("s_varの位置:%d\n",p_s);
printf("c_var2の位置:%d\n",p_c2);
system("pause");
return 0;
}
运行结果是
test_structのサイズは:16
d_varの位置:2293600
c_var1の位置:2293608
s_varの位置:2293610
c_var2の位置:2293612
我知道在linux的gcc下默认的是四字节的。
也能看出他现在的分配是
8+2+2+4
且我查到有1.默认为4字节的对齐方式,所以小于4字节的类型都占4字节.这种说法
那1这种说法不是应该分配为8+4+4+4啊。为什么是8+2+2+4
还有不是8+1+2+1更合理吗。
这和他默认的4字节有什么关系