首页 > 其他分享 >4.2-主存中的数据组织

4.2-主存中的数据组织

时间:2023-02-26 17:55:36浏览次数:39  
标签:存储 字节 4.2 主存 程序 地址 对齐 数据组织 边界

 

存储字长

  1. 主存的一个存储单元所包含的二进制位数
  2. 目前大多数计算机的主存按字节编址,存储字长也不断加大,如16位字长,32位字长
  3. ISA设计时要考虑的两个问题
    • 如何根据字节地址读取一个32位的字?-字的存放问题
    • 一个字能否放在主存的任何字节边界?-字的边界问题

数据存储与边界的关系

  1. 按边界对其的数据存储

Int I(32), short(16) k, double(64) x, char(8) c, short j(32位系统中),一个字节8位

图片包含 图表

描述已自动生成

按照边界对齐的方式存储

缺点:会造成存储空间的浪费,比如k浪费了2个字节

  2. 未按边界对齐的数据存储

图表

描述已自动生成

缺点:虽然节省了空间,但增加了访存次数,需要在性能与容量间权衡

比如:访问j就需要方位一次12还需要方位一次16,访问x需要三次(4,8,12)

  3. 边界对齐与存储地址的关系(以32位为例)

表格

低可信度描述已自动生成

    1. 双字节数据边界对齐的起始地址的最末三位为000(8字节的整数倍)
    2. 单字长边界对齐的起始地址的末二位为00(4字节的整数倍)
    3. 半字长边界对齐的起始地址的最末一位为0(2字节的整数倍)

表格

描述已自动生成

S1和S2两个字节的存储方式实际S1需要12个字节,S2需要9个字节,但是按照对齐要求依然需要12个字节来存储S2,实际上是没有区别的

大端与小端的存储方式

  1. Big-endian:最高字节地址(MSB)是数据地址

图片包含 图表

描述已自动生成

  2. Little-endian:最低字节地址(LSB)是数据地址

手机屏幕截图

中度可信度描述已自动生成

但是,如果你的程序要跟别人的程序产生交互呢?在这里我想说说两种语言。C/C++语言编写的程序里数据存储顺序是跟编译平台所在的CPU相关的,而JAVA编写的程序则唯一采用big endian方式来存储数据。

试想,如果你用C/C++语言在x86平台下编写的程序跟别人的JAVA程序互通时会产生什么结果?就拿上面的0x12345678来说,你的程序传递给别人的一个数据,将指向0x12345678的指针传给了JAVA程序,由于JAVA采取big endian方式存储数据,很自然的它会将你的数据翻译为0x78563412。什么?竟然变成另外一个数字了?是的,就是这种后果。因此,在你的C程序传给JAVA程序之前有必要进行字节序的转换工作。

例如:

一些文字和图片的手机截图

描述已自动生成

R1=0X100,指的是r1的初始值是100

STR r0, [r1] – 将r0的内容执行r1所在的储存单元上,就是将16进制数11223344存放在100号起始单元

LDRB r2, [r1] -从r1的储存单元取出来一个字节赋值给r2

标签:存储,字节,4.2,主存,程序,地址,对齐,数据组织,边界
From: https://www.cnblogs.com/smilexm/p/17157170.html

相关文章

  • Linux 脚本编译安装http-2.4.27版本
           Linux脚本编译安装http-2.4.27版本运行脚本前请将国内的比较快的基础源和epel源配置好,剩下就不用管了,运行脚本,半个小时左右自动编译安装完,并且大部分......
  • Url管理-请求与响应-(4.2)深入理解YII2.0
    Url管理在Web开发中,对于URL有一些共性的需求,如:统一、简洁的URL创建方式URL的伪静态化(美化)处理从URL中解析出相应的路由信息,引导应用执行后续处理这些功能在前面我们讲的......
  • xcode 4.2 如何调试 EXC_BAD_ACCESS
    打开NSZombieEnabled来调试EXC_BAD_ACCESS在写iOS程序时,无论你是新手还是牛人,都有可能会碰到EXC_BAD_ACCESS。而此时你的debugarea中不会显示任何信息可以来帮助你找出......
  • 根composer.json需要php^8.0,但您的php版本(7.4.27)不满足该要求
    我安装了php7.4,但当我在项目中写入composerinstall时,我看到了以下错误:Rootcomposer.jsonrequiresphp^8.0butyourphpversion(7.4.27)doesnotsatisfythatreq......
  • 打开MASA Blazor的正确姿势4.2:Flex弹性布局
    MASABlazor预定义了Flex弹性布局的样式,可以直接在class属性中直接使用。 一、复习一下之前提到过的Flex样式(转为MASABlazor样式类):1、在容器(父元素)上使用的样式-6个......
  • 第 18 章 使用 JDBC 4.2 和 Derby 访问 数据库
    18.1JDBC......................................................31318.1.1数据库驱动程序............................31418.1.2查看数据库.........................
  • manim 4.2
    frommanimimport*importsympyassymimportnumpyasnpiftype("xxp'smanim")==str:#不写在下方construct函数中,因为这可能使用到其内部的函数,我想与......
  • 主存储器及其组织实现
    写在前面:由于存储器这一章知识十分繁多,笔记本写不下了在这里记录:1.半导体存储器芯片的一般结构2.MOS写常态存储器芯片3.主存储器以及其容量,带宽扩......
  • UE4.27接入安卓SDK
    1.安装AndroidSKD+NDK过程中遇到了报错:Exceptioninthread"main"  java.lang.NoClassDefFoundError:javax/xml/bind/annotation/XmlSchema  网上给的解决方......
  • 4.2虚拟存储器
    @目录一、引子二、虚拟存储系统(1)介绍(2)分页1.有效位2.辅存块号3.访问位4.脏位三、页式虚拟存储器四、存储器的层次化结构五、段式虚拟存储器六、段页式虚拟存储器一、引子......