2012 组成原理 数据对齐 选择题
第 15 题

某计算机存储器按字节编址,采用小端方式存放数据。假定编译器规定int 型和short 型长度分别为32 位和16位,并且数据按边界对齐存储。某C 语言程序段如下:

struct    {

int    a;

char b;    short     c;

}record;

record\.a=  273;

若record 变量的首地址为0xC008, 则地址0xC008中内容及record.c 的地址分别为()。

A.0x00 、0xC00D

B.0x00 、0xC00E

C.0x11 、0xC00D

D.0x11 、0xC00E

[tag_link]

正确答案:D

尽管 record 大小为 7 个字节(成员 a 有 4 个字节,成员 b 有 1 个字节,成员 c 有 2 个字节), 由于数据按边界对齐方式存储,故 record 共占用 8 个字节。record.a 的十六进制 表示为 0x00000111,由于采用小端方式存放数据,故地址 0xC008 中内容应为低字节 0x11; record.b 只占 1 个字节,后面的一个字节留空;record.c 占 2 个字节,故其地址为 0xC00E。各字 节的存储分配如下图所示。地址 0xC008 0xC009 0xC00A 0xC00B 内容 record.a.(0x11) record.a.(0x01) record.a.(0x00) record.a.(0x00) 地址 0xC00C 0xC00D 0xC00E 0xC00F 内容 record.b - record.c record.c