一个C中的内存对齐问题
#include<stdio.h>int main()
{
union D
{
double e;
int f;
char g;
};
struct F
{
int a;
char b;
double c;
int d;
};
struct abc
{
short d;
int b;
double c;
chara;
union D h;
struct F f;
};
struct abcA;
printf("0x%p ",&A.a);
printf("0x%p ",&A.b);
printf("0x%p ",&A.c);
printf("0x%p ",&A.d);
printf("0x%p ",&A.h);
printf("0x%p \n",&A.f);
printf("%d\n",sizeof(A.h));
printf("%d\n",sizeof(A.f));
printf("%d\n",sizeof(A));
}
代码如上
很简洁
我运行了下输出结果为(地址信息略)
8
56
88
能否有高人解释下
最后A的大小为什么不是112?
主要应该是字节对齐问题,,,但是112我就不知道你怎么算出来的了。。结构体A里面的d,short类型,2个字节,考虑字节对齐,因为下面b为4个字节int型,所以其实d占4个字节, --- 4+4 = 8
下面的c占8个字节, +8 = 16
接着char类型的a在上下都为8个字节的情况下也要8个字节 +8 = 24
下面的union分析其内部它占用8个字节 +8 = 32
接下来的结构体F
int a --4个字节 +4= 36
char b --4个字节(字节对齐) +4=40
double c --8个字节 +8=48
int d --4*10=40个字节 +40 =88
所以A一共占用88个字节 elvo 发表于 2014-10-25 16:55
主要应该是字节对齐问题,,,但是112我就不知道你怎么算出来的了。。结构体A里面的d,short类型,2个字节 ...
但是最后结构体的内存大小不是要扩展为最大成员变量的倍数吗,难道说的是基本变量,不是复合变量? 本帖最后由 oggplay 于 2014-10-30 21:58 编辑
union 类型和对齐要区分,34楼希望对你有所帮助http://bbs.fishc.com/thread-45454-2-1.html
页:
[1]