为什么无法一步读取未对齐的单词?

2024-04-13

鉴于 CPU 的字大小允许它寻址内存中的每个字节。
鉴于通过PAE http://en.wikipedia.org/wiki/Physical_address_extensionCPU 甚至可以使用比字大小更多的位来进行寻址。

CPU 无法一步读取未对齐字的原因是什么?

例如,在 32 位机器中,您可以读取从位置 0 开始的 4 字节块,但无法读取从位置 1 开始的块(可以,但需要几个步骤)。
为什么CPU不能这样做呢?


问题不在于 CPU 寻址内存中任何单个字节的能力。但它是内存,其粒度不一样。 正如 Oli 所说,这是非常特定于体系结构的,但内存芯片通常通过其数据总线宽度来寻址。这意味着给定的地址代表其数据总线的完整“字”。

让我们以 32 位 CPU 为例,它具有连接到存储设备的 32 位宽数据总线。当CPU想要访问地址处的字时0x00000000,它确实想要访问字节0, 1, 2 and 3。然而,对于存储芯片来说,这是由单个地址表示的0x00000000.

现在当CPU想要访问地址处的字时0x00000001,它确实想要访问字节1, 2, 3 and 4。然而,对于存储芯片,这是由地址处的一段字表示的0x00000000以及地址处的一段单词0x00000001.

因此需要两个总线周期。

EDIT:添加一些接线图

为了说明这一点,下面是两种相反的寻址方案:

注意 RAM 芯片地址中的位移。

地址将如下所示:

// From the RAM point of view
@0x00000000: Bytes 0x00000000 to 0x00000003
@0x00000001: Bytes 0x00000004 to 0x00000007

访问双字@0x00000001,您可以看到不可能直接寻址。您需要向 RAM 芯片询问地址处的两个双字0x00000000 and 0x00000001.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么无法一步读取未对齐的单词? 的相关文章

随机推荐

  • 仅包含 1 个数字的示例[重复]

    这个问题在这里已经有答案了 我正在尝试创建一些模拟数据 为了创建聚类数据 我已指定处方者是否在一个或多个本地卫生区域 LHA 工作 现在 我正在尝试根据患者的 LHA 为患者指定一名处方医生 其代码位于以下代码块中 for i in seq
  • 从 XML 创建实体

    我有以下 XML 结构
  • Django 中的脏字段

    在我的应用程序中 我需要在保存模型时保存更改的值 旧的和新的 有示例或工作代码吗 我需要这个来预先审核内容 例如 如果用户更改了模型中的某些内容 那么管理员可以在单独的表中查看所有更改 然后决定是否应用它们 我发现阿明的想法非常有用 这是我
  • Underscore.js - 在嵌套 Json 中进行过滤

    我想获取所有值 其中category id 1 所以我应该得到 2 个结果 我的 JSON 看起来像这样 var test id 1 name name1 value value1 category id 1 name category1
  • 不同用户类型的 Firebase Auth

    我正在开发一个有两个应用程序的项目 一个用于 请求者 用户 一个用于 响应者 用户 并且我目前正在使用 Firebase 进行身份验证 用户使用电子邮件 密码组合登录 这是问题的根源 问题在于用户冲突 因为身份验证模块连接到 Firebas
  • 如何在 TinyMCE 4 中创建一个增加字体大小的按钮

    有没有人设法在 TinyMCE 4 中创建一个按钮 该按钮会将所选文本的字体大小增加 例如 1px 我遇到的问题是获取选定的文本 无论它是否已经在跨度中 我愿意修改TinyMCE源代码 感谢您的任何想法 你不需要修改源代码 你可以创建一个插
  • WooCommerce 仅显示已购买的商品

    所以我在网上查了很多资料 但找不到解决方案 基本上我想做的是显示用户在商店中购买的所有产品的产品循环 就像显示普通产品一样 如果你还是不明白 也许这会帮助你明白我的意思 这是 WooCommerce 文档中的示例产品循环 ul class
  • 在移动设备中使用固定背景图像滚动时出现滞后

    我想要一个具有固定背景图像 大约 46k 的网站 该图像可以在我的 PC 浏览器上运行 然而 当在我的移动浏览器上滚动时 重绘背景图像需要大约一秒钟的时间 有什么想法可以解决这个问题吗 谢谢 这是我的CSS html body backgr
  • 如何获取 DLL 或 EXE 的文件描述

    我正在创建一个程序 其中之一是控制服务 我正在尝试以类似于中列出的方式列出服务msconfig 下面第一个窗口 我找到了注册表中列出的服务的位置 在 Vista 和 Win7 中 DisplayName 和 Description 通常是引
  • 无法将 SonarQube 分析结果与 VSTS 集成

    我正在 VSTS 中使用准备 运行和发布分析任务来运行 SonarQube 分析并发布结果以构建摘要 前两个步骤成功执行 但 发布分析 任务失败 因为它无法获取分析 ID 的任务 我收到以下错误消息 无法获取 ID AWE9 wu8 fbf
  • Swift:是否可以向协议添加协议扩展?

    假设我有两个协议 protocol TheirPcol protocol MyPcol func extraFunc 我想做的是为 TheirPcol 创建一个协议扩展 它可以让extraFunc 从事任何符合 TheirPcol 的事情
  • 多功能 SAM 模板的推荐项目结构

    我有一个新项目 需要相对少量的服务 可能是 10 个或更少 因此将每个服务放在单独的项目存储库中并不经济 每项服务都将通过 SAM 模板定义为 AWS Serverless Function 我的问题是 组织或构建这样一个项目的推荐方法是什
  • ag-grid - 删除具有无限行模型的行

    我正在尝试使用具有无限行模型和分页功能的网格来删除行 我不确定如何删除特定行并更新内部模型 而无需刷新网格 从而发出新的 ajax 请求 我已经读过这个线程 https github com ag grid ag grid issues 1
  • 将单独的年份和月份列合并为单个日期列

    我有一个像这样的数据框 df code year month 1 YYOOGG 2011 8 2 YYOOGG 2011 1 3 YYOOGG 2011 4 4 YYOOGG 2011 3 5 YYOOGG 2011 12 6 YYOOGG
  • 在 OS X 10.11 El Capitan、macOS 10.12 Sierra、macOS 10.13 High Sierra (< 10.13.3) 上安装 pecl 和 pear

    所以它看起来像新的 系统完整性保护 lockdown http arstechnica com apple 2015 09 os x 10 11 el capitan the ars technica review 8 usr 以及其他目录
  • 带有标题和子标题的导航抽屉菜单项

    我有一个导航抽屉原型 我们有相同的标题和副标题 我正在使用菜单组来包含标题 1 只想为导航抽屉添加子标题或帮助文本 2 想要自定义图标大小以适合整个标题和子标题 如下图所示
  • CMake:如何禁用单个 *.cpp 文件的优化?

    我想禁用 CMake 项目中单个 cpp 文件的优化 我发现 CMake 提供了以下功能来实现此目的 SET SOURCE FILES PROPERTIES FILE PROPERTIES COMPILE FLAGS O0 然而 这似乎对我
  • 如何检查列的值是否位于其他文件中两列的值之间并从 Unix 中的列中打印相应的值?

    我有两个文件要比较 我找到了如何比较列并根据条件进行打印 我手头的问题是 我必须检查 file1 中的 column 2 的值是否位于 file2 中定义为两列范围 col 2 col 3 的值之间 如果这是真的 那么我应该在 file1
  • 在打开表单之前设置所有标签字体

    在打开表单之前 我使用以下代码来检查其标签 然后更改字体 foreach Label ctl in frm Controls ctl Font usefontgrid 但在第一行返回错误 因为它检查其他控件类型 例如文本框或按钮等 如何检查
  • 为什么无法一步读取未对齐的单词?

    鉴于 CPU 的字大小允许它寻址内存中的每个字节 鉴于通过PAE http en wikipedia org wiki Physical address extensionCPU 甚至可以使用比字大小更多的位来进行寻址 CPU 无法一步读取