[有人询问为何结构型对象需要内部填充。我的回复是这样的。] From: scs@eskimo.com (Steve Summit) Date: Sun, 17 Mar 2002 20:56:35 -0500 Message-Id: <2002Mar17.2056.scs.007@aeroroot.scs.ndip.eskimo.net> 你 wrote: > ...what is still haunting my brain is why structures > need internal padding 它是为了对其。许多处理器不能访问2-和4-字节的数字(比如int,long int)如果它们挤成一团。 比如你有这样的结构型: struct { char a[3]; short int b; long int c; char d[3]; }; 现在,你或者想它可能在内存中是这样存放的: +-------+-------+-------+-------+ | a | b | +-------+-------+-------+-------+ | b | c | +-------+-------+-------+-------+ | c | d | +-------+-------+-------+-------+ 但是,如果编译器这样做对处理器更容易: +-------+-------+-------+ | a | +-------+-------+-------+ | b | +-------+-------+-------+-------+ | c | +-------+-------+-------+-------+ | d | +-------+-------+-------+ 在填充版本,注意b和c成员是怎样停止的呢?它看起来对你我都有一点困难。总之,它对处理器也是。因此大部分编译器会填充结构型对象(好似有额外的,不可见的域成员): +-------+-------+-------+-------+ | a | pad1 | +-------+-------+-------+-------+ | b | pad2 | +-------+-------+-------+-------+ | c | +-------+-------+-------+-------+ | d | pad3 | +-------+-------+-------+-------+