对于 32 位机器上定义如下结构体, 请问其 sizeof(xx) 等于多少?

1154 次浏览
  • A、24
  • B、15
  • C、20
  • D、19
由于CPU一次读取若干字节的内存数据,所以,为了方便存取,编译器可以指定结构体的对齐方式。由于静态成员放置在静态区而不占用结构体内存,所以将其忽略。由于long long、char、int、char[2]占用的字节各为8、1、4、2,如果是8字节对齐,其内存排布如图一所示;如果是4字节对齐,其内存排布如图二所示。其中,灰色是保留字节,用于字节对齐。由于long long占用8个字节,结构体的内存占用大小应该等于8的整数倍,即大于20的8的整数倍的最小值,为24。 附带指出的是, char[2]虽然占用2个字节,但它的存取粒度是1字节,其存储起始地址只需要整除1,即任意起始都可以。
挑战成功
2年前