IcePhp
关于sizeof(struct)的问题
2牙 发表于 2008-11-02 08:03:54
typedef struct st
{
double a;
int b;
char c;
}st;
typedef struct ss
{
int m;
double n;
char o;
}ss;
他说不是,一个是16,一个是24.
我问他为什么,结果笔试开始了,他也没跟我说。
昨天笔试通过,今天要面试了。早上起来研究这个问题。
先贴源码
#include <iostream>
using namespace std;
typedef struct st
{
double a;
int b;
char c;
}st;
typedef struct ss
{
int m;
double n;
char o;
}ss;
typedef struct sa
{
int q;
char w;
char e;
}sa;
typedef struct sd
{
float r;
int x;
char p;
}sd;
int main()
{
cout << sizeof(st)<<endl;
cout << sizeof(ss)<<endl;
cout << sizeof(sa)<<endl;
cout << sizeof(sd)<<endl;
return 0;
}
结果显示 分别是: 16 24 8 12
先是很不理解为什么对齐了之后会缩水。
虽然数据对齐是会浪费内存,但是这样对cpu的工作有帮助。
我又一想,如果对齐了,假如前面是对齐目标是8位的,而后面两个数据的长度加起来不到八位
如果都分别放在一个8位的区域里面,就要占16位的内存。
但是如果将他们放在一起,却只会占8位的内存。
于是我将第一个st 改成
typedef struct st
{
int a;
char b;
char c;
}st;
将a的类型改成int,b的类型改成char。这样三个数据里面只有a最长4位。
那么b,c必会要对齐到a。如果我的想法成立的话,b和c应该是放在一个4位的区域里面而不是两个4位的区域。
运行结果是 8
看来我的想法成立。
再进行验证:
typedef struct sd
{
float r;
int x;
char p;
//char l;
}sd;
char l 被注释掉的时候 sd的大小为12
把注释取消 sd的大小仍然为12 因为char x 2 = 4;
typedef struct sd
{
double r;
int x;
char p;
char l;
}sd;
再改成如上:
r为double,8位
int + char x 2 = 8 位
所以sd现在的长度为16
名词解释
2牙 发表于 2008-01-08 21:00:20
1.CPU: 中央处理单元。它控制计算机的操作并完成数据的处理。
2.主机:包括处理器和存储器。 处理器包括 算术逻辑单元和控制器。存储器包括主存储器和辅存储器
3.计算机: 将外界信息通过内部的程序的处理获得处理结果
4.计算机系统: 包括硬件和软件 硬件是计算机的实体,软件由具有各种特殊的信息组成
5.I/O:输入和输出设备
6.数据通信: 依照一定的通信协议,利用数据传输技术在两个终端之间传递数据信息的一种通信方式和通信业务
7.多道程序:特点--1.内存中同时存放几道相互独立的程序。---2.宏观上并行。---3.微观上串行。
8.系统总线:连接计算机的主要部件的总线
9.总线带宽:在一个时钟周期中,总线能传送的数据量
10.即插即用:设备而插上接口立即可使用
11.接口:连接两个部件的逻辑电路
12.总线主设备:申请,掌握总线权的设备,能与其他非主控模块进行数据交换的模块或设备
13.总线:连接两个或多个设备的通信通路
14.存储器:计算机系统中的记忆设备,用来存储程序和数据
15.存储元:存储器中最小的存储单位,可以存储一个二进制代码
16.存储单元:计算机存储器中一个寻址编号所指定的存储元
17.存储器地址:每个存储单元的编码
18.存储周期:连续存取之间所需间隔的最小时间
19.存取时间:启动一次存取操作存储器操作所经历的时间
20.存储器传输率:数据传入或传出存储器的速率 即 单位时间里存储器所存取的信息量
21.中断:设备主动通知CPU进行数据交换的过程
22.中断系统:中断装置和中断处理程序
23.断点:在发生中断时,在当下执行的程序中设立一个点以方便下次接着从此点继续执行程序
24.现场:程序计算器,处理器寄存器等设备在中断产生时的状态
25.中断向量:中断服务程序的入口地址
26.单重中断:外设的中断请求只有一个能得到CPU的响应
27.中断嵌套:CPU在执行一个中断服务程序时,有另一个优先级更高的中断提出中断请求,挂起当前的中断,去处理优先级高的中断,处理完之后再返回此中断
28.指令周期:一条指令所要求的处理过程
29.指令:计算机执行某种操作的命令
30.程序:有序的指令串构成,程序要解决一个具体的问题
31.指令系统:一台计算机能执行的全部指令的集合,
32.寻址方式:表示指令中操作数所在的方法
33.有效地址:操作数所在的真实地址
34.前变址:在寻址方式中,先变址,再间接寻址的一种寻址方法。(后变址反之)
35.寻址方式类型:
36.微命令:直接作用于控制电路的控制信号,控制信号的最小单位
37.微操作:执行部件能收到的最小信号,微命令导致的操作
38.微指令:在同一时间段内执行的一组微操作
39.微程序:有序的微指令串构成的一段
40.微地址:微指令的地址
41.微指令周期:从微指令执行到硬件实现功能的时间
42.CPU周期:机器周期,从内存读出一条指令字的最短时间
堆和栈的区别
2牙 发表于 2007-10-16 08:19:53
二 转载自 http://blog.5d.cn/vip/snailman/200611/335881.html
