返回信息流typedef struct
{
char c;//1
int i;//4
short s;//2
long l;//4
float f;//4
double d;//8
long double ld;//8
} M;
sizeof(M)=40?
不明白了,按照内存对齐的规则来,不是8(char、int、short)+8(l、f)+8(d)+8(ld)=32么?机器上是40?
求解。
这是一条镜像帖。来源:北邮人论坛 / cpp / #38020同步于 2010/4/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
sizeof的一个问题
lichehuo
2010/4/16镜像同步21 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
sizeof (long double) == 12
1(char) + 3(padding) + 4(int) + 2(short) + 2(padding) + 4(long) + 4(float) + 8(double) + 12(long double) = 40
【 在 lichehuo 的大作中提到: 】
: typedef struct
: {
: char c;//1
: ...................
结构成员的位置不一定是连续的,可能会分配多余内存,如楼上所说
re...
lz你可以试着把int和short交换位置...
那样就是你想要的结果了...
【 在 jokerlee 的大作中提到: 】
: sizeof (long double) == 12
: 1(char) + 3(padding) + 4(int) + 2(short) + 2(padding) + 4(long) + 4(float) + 8(double) + 12(long double) = 40
: --
: ...................
【 在 shenlei 的大作中提到: 】
: re...
: lz你可以试着把int和short交换位置...
: 那样就是你想要的结果了...
为啥换了位置就是32了?
还有2楼说long double=12,我机器上=8啊
结构体类型中的成员顺序不一定跟定义的时候一样。
【 在 lichehuo 的大作中提到: 】
: typedef struct
: {
: char c;//1
: ...................
typedef struct
{
char c;//1
int i;//4
short s;//2
long l;//4
float f;//4
double d;//8
long double ld;//8
} M;
C char类型占用1个字节
i int 占用4个字节,并且由于内存对齐,导致上面的c也占用4个字节
s short占用2个字节,
l long占用4个字节,并且由于内存对其,导致上面的s也是占用4个字节
f float占用4个字节
double:8个字节,并且由于内存对齐,上面的要占用8的倍数,由于上面目前是4+4+4+4+4=20不是8的倍数,所以上面要空4个补齐。
long double 8个字节
所以总共是24+8+8=40
【 在 fox1987 的大作中提到: 】
: typedef struct
: {
: char c;//1
: ...................
谢谢,你的讲解很详细。
是我没有理解“内存对齐”是怎么个对齐法。