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

admin2021-03-25  57

问题 某计算机存储器按字节编址,采用小端方式存放数据,假定编译器规定int型和short型长度分别为32位和16位,并且数据按双字节对齐存储。某C语言程序段如下。   
structf   
int a;   
char b;   
short c;   
}record;   
record.a=273:
a=273;   
若record变量的首地址为0xc008,则地址0xc008中的内容是(42)________,record.c的地址是(43)________。
(43)

选项 A、0xc00a
B、0xc00c
C、0xc00d
D、0xc00e

答案D

解析 本题考查计算机数据结构的基础知识。   
在计算机系统中,常以字节为基本单位存储数据。在C语言中除了8bit的char等类型之外,还有16bit的short型、32bit的int型等。另外,对于位数大于8的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在如何安排多个字节的问题,因此就产生了大端存储模式和小端存储模式。大端模式是指数据的高位保存在内存的低地址中,而数据的低位保存在内存的高地址中。小端模式是指数据的高位保存在内存的高地址中,而数据的低位保存在内存的低地址中。例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么Ox11为高字节,0x22为低字节。对于大端模式,就将Ox11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。常用的X86结构是小端模式,而PowerPC则为大端模式。很多ARM、DSP都为小端模式。有些ARM处理器还可以由硬件选择大端模式或小端模式。   
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型的一类。结构体的大小不是结构体元素大小单纯相加就行的,因为我们主流的计算机使用的都是32bit字长的CPU,对这种类型的CPU取4个字节的数要比取一个字节更高效,也更方便。所以在结构体中每个成员的首地址都是4的整数倍的话,取数据元素时就会相对更高效,这就是内存对齐的由来。每个特定平台上的编译器都有自己的默认“对齐系数”。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数。缺省条件下,编译器为每个成员按自然对齐(alignment)条件分配空间。    结构体的第一个数据成员放在偏移为0的地方,以后每个数据成员的对齐由#pragmapack指定的数值和这个数据成员自身长度决定。在数据成员完成各自对齐之后,结构体本身也要进行对齐,对齐将由#pragma pack指定的数值和结构最大数据成员长度决定。
转载请注明原文地址:https://kaotiyun.com/show/gVWZ777K
0

相关试题推荐
最新回复(0)