struct date {int i; char ch ; double f;} b;则结构变量中b所占的内存字节数是

在16位IBM-PC机上使用c语言,若有如下定义

在32位系统下是16
分析:CPU会进行位对齐,32位系统下,int点4个字节,char一个字节,double是8个字节
CPU会进行位对齐,按最长的对齐,这里就是8字节对齐。
i还是4个字节。为了对齐,ch会占4个字节,这样i和ch正好占8个,和f对齐。追问

我的题目是16位IBM-PC上使用。

追答

如果是11的话,那说明你用的编译器没有使用对齐,在16位系统上int占2个字节,char 1个字节,double 8个字节,不对齐的话就是11个字节。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-16
struct date {
int i; //4字节
char ch ; //1字节
double f; //8字节
} b;

没有别的设置的话 遵从字节对齐
sizeof(b) = 4 + 4 + 8 = 16追问

怎么讲这个

追答

呵呵 不好意思 没看见你的 问题补充
我说的情况是 一般机器 也就是32位 pc机 答案是 16
你说的是 16位
那可能就不会出现 字节对齐
那可能是 2+1+8 = 11

第2个回答  2012-02-16
16位内存对齐原则 int 4字节 char 2字节 double 8字节 14追问

答案是11

追答

那就是8位的CPU 没什么对不对齐的 16位的不可能出现奇数。。。

第3个回答  2012-02-16
16
谢谢采纳追问

你仔细看题目,这个不对

追答

结构体变量的字节数不是按照每个相加的,在本题中不是2+1+8=11,而是依照对其规则来的
比如这里占位最多的基本类型是double,放到最后面,所以其他的也按照double的对齐。char按照int对齐,不超过double的,所以就是8+8=16
谢谢采纳

追问

答案是11

追答

如果相信我,那么答案错
或者你相信答案
ps:你是在准备考二级吧?感觉知道里面问了那么多的,很多都是基础的东西。买本书看看吧

本回答被提问者采纳
第4个回答  2012-02-16
16
相似回答