博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
组成原理说明------地址对齐
阅读量:6228 次
发布时间:2019-06-21

本文共 944 字,大约阅读时间需要 3 分钟。

1.引入

  1.1如下面的代码,定义了三个变量,int,char,int,并输出他们的十六进制的内存地址。

#include
int main(){ int a; char b; int c; printf("a:%x b:%x c:%x\n",&a,&b,&c); //输出: a:22ff1c b:22ff1b c:22ff14 return 1;}

  1.2图示分析上述代码

   代码中为定义的变量a,b,c分配了内存单元,分配内存单元是从大地址开始分配的,可见a的内存地址大于b的地址。(除非分配的内存单元循环了。从0跳大了最大,又开始新的一轮减小)

  int占用4个字节,char占用1个字节。

  从代码中可以看出为三个连续定义的变量的内存分配是不连续的。这就是因为地址对齐的原因。

2.地址对齐概念

  地址对齐其实就是CPU设计中的一个时空权衡,这里采用的是空间换时间的。主要的解决问题是如何能过快速的读取给定的一个变量。

  目前的主流计算机有32位,64位这是地址线,一般数据线与地址线条数相同。

  如果放置数据时不考虑地址对齐,32位的CPU读取一个4字节的int最少需要一次内存访问,最多需要2次访问内存。下图中左面,取一个int要两次内存访问,而右边的只需要一次内存访问。

  上面的左图为什么是2次访问内存呢?这个需要用组成原理说明。

3.计算机组成原理解释地址对齐

  这里使用32位说明。16位的80x86,和目前流行的64位也是一样的。

  32位字长的机器,能一次访问的数据是32bits。

  如下图所示:32条数据线,分成了4组,这样就可以使用字节编码,最小的访问内存单元为一个字节。

        同样给出一个32位地址最多可以访问32位的数据。

        若一个int数据保存在32位机器中如2中的左图所示,一次只能访问到2字节数据,所以需要2次内存访问;若一个int数据保存在32位机器中如2中的右图所示,给出一次地址就能够访问整个int数据。

  

 4总结

  许多RAM都采用地址对齐,加速CPU。

  采用地址对齐保存数据对应的地址如下: 

  

 

转载地址:http://wsjna.baihongyu.com/

你可能感兴趣的文章
Appium for win7 环境搭建
查看>>
【转载】MFC动态创建控件及其消息响应函数
查看>>
解決BufferedReader读取UTF-8文件中文乱码(转)
查看>>
【转】预装(push)lib64中so文件查找错误
查看>>
2014百度之星预赛(第二场)——Best Financing
查看>>
《Python简明教程》总结
查看>>
构造 - HDU 5402 Travelling Salesman Problem
查看>>
[转]图解分布式一致性协议Paxos
查看>>
【SSH2(实用文章)】--Struts2文件上传和下载的例子
查看>>
Rust初步(七):格式化
查看>>
maven教程
查看>>
微服务架构的设计模式
查看>>
【C++】继承时构造函数和析构函数
查看>>
python风味之大杂烩
查看>>
NSDate & NSDateFormatter
查看>>
android 点击屏幕关闭 软键盘
查看>>
相似图片搜索的原理(转)
查看>>
钟南山:高收入群体往往老得快
查看>>
Linux Kernel(Android) 加密算法汇总(三)-应用程序调用内核加密算法接口
查看>>
开发中三个经典的原则
查看>>