为什么需要内存对齐? [复制]

2024-03-09

可能的重复:
内存对齐的目的 https://stackoverflow.com/questions/381244/purpose-of-memory-alignment

我在网上读了一些关于内存对齐的文章,可以理解,通过正确对齐的内存(采用2字节对齐),我们可以一次性快速获取数据。

But if we have memory like a single hardware piece, then given an address, why cannot we read 2-byte directly from that position. like: enter image description here

我想了一下。我认为如果内存位于奇偶存储库中,那么该理论就适用。

我缺少什么?


你的图片描述了如何we(人类)可视化计算机内存。

实际上,可以将内存视为巨大的位矩阵。 每个矩阵列都附有一个“读取器”,可以读取/写入该列中的任何位。 每个矩阵行都有一个“选择器”,它可以选择阅读器将读/写的特定位。

因此,该读取器可以一次读取整个选定的矩阵行。 该行的长度(矩阵列数)定义一次可以读取多少数据。 例如,如果您有 64 列,那么您的内存控制器可以一次读取 8 个字节(但它通常可以执行更多操作)。

只要保持数据一致,您就需要更少的内存访问。 即使您只需要读取两位,但它们位于不同的行,您也将需要对内存进行两次访问,而不是一次。

另外,还有一个整体的方面writing,这是一个不同的问题。

正如您可以读取整行一样,您也可以写入整行。 如果你的数据没有对齐,当你写入不是整行的内容时,你将需要执行读-修改-写(读取该行的旧内容,修改相关部分并写入新内容)。

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

为什么需要内存对齐? [复制] 的相关文章

  • 计算 XML 中特定 XML 节点的数量

    请参阅此 XML
  • 代码 GetAsyncKeyState(VK_SHIFT) & 0x8000 中的这些数字是什么?它们是必不可少的吗?

    我试图在按下按键的简单动作中找到这些数字及其含义的任何逻辑解释 GetAsyncKeyState VK SHIFT 0x8000 可以使用哪些其他值来代替0x8000它们与按键有什么关系 GetAsyncKeyState 根据文档返回 如果
  • 在c#中执行Redis控制台命令

    我需要从 Redis 控制台获取 客户端列表 输出以在我的 C 应用程序中使用 有没有办法使用 ConnectionMultiplexer 执行该命令 或者是否有内置方法可以查找该信息 CLIENT LIST是 服务器 命令 而不是 数据库
  • C++ 是否可以在 MacOS 上与 OpenMP 和 boost 兼容?

    我现在已经尝试了很多事情并得出了一些结论 也许 我监督了一些事情 但似乎我无法完成我想要的事情 问题是 是否有可能使用 OpenMP 和 boost 在 MacOS High Sierra 上编译 C 一些发现 如果我错了请纠正我 Open
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • 使用 GCP 的数据存储区时如何区分代码是在模拟器中运行还是在 GKE 中运行

    按照中给出的说明进行操作后 我不确定是否遗漏了任何内容https cloud google com datastore docs tools datastore emulator https cloud google com datasto
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • 打破 ReadFile() 阻塞 - 命名管道 (Windows API)

    为了简化 这是一种命名管道服务器正在等待命名管道客户端写入管道的情况 使用 WriteFile 阻塞的 Windows API 是 ReadFile 服务器已创建启用阻塞的同步管道 无重叠 I O 客户端已连接 现在服务器正在等待一些数据
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 这个可变参数模板示例有什么问题?

    基类是 include
  • 我可以在“字节数”设置为零的情况下调用 memcpy() 和 memmove() 吗?

    当我实际上没有什么可以移动 复制的时候 我是否需要处理这些情况memmove memcpy 作为边缘情况 int numberOfBytes if numberOfBytes 0 memmove dest source numberOfBy
  • 为boost python编译的.so找不到模块

    我正在尝试将 C 代码包装到 python 中 只需一个类即可导出两个函数 我编译为map so 当我尝试时import map得到像噪音一样的错误 Traceback most recent call last File
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • 如何确定文件是以二进制还是文本模式打开的?

    给定一个文件对象 如何确定它是否以字节模式打开 read回报bytes 或在文本模式下 read回报str 它应该与阅读和写作一起使用 换句话说 gt gt gt with open filename rb as f is binary f
  • React - 如何导出纯无状态组件

    如何导出无状态的纯哑组件 如果我使用类 这有效 import React Component from react export default class Header extends Component render return pr
  • .NET Core 中类内部的结构对齐

    我试图理解为什么只包含 int 的结构在类中占用 8 个字节的内存 考虑以下代码 static void Main var rand new Random var twoIntStruct new TwoStruct new IntStru
  • 将最大子宽度分配给其他子宽度的弹性框

    我有一组宽度应该相似的孩子 对于简单的孩子来说 宽度最大的孩子应该分配给其他孩子 我尝试使用flexbox但无法得到它 是否可以在弹性盒中实现或者我应该去实现JS解决方案 请参考我尝试过的示例 请不要发布任何 javascript 答案 f
  • While循环第二次忽略scanf

    include
  • 尝试调整 NSImage 的大小,使其变成 NSData

    我有一个 NSImage 我正在尝试像这样调整大小 NSImage capturePreviewFill NSImage alloc initWithData previewData NSSize newSize newSize heigh
  • 包含不区分大小写的方法而无需进行重大代码更改?

    有没有办法忽略 contains 方法的大小写 但同时使代码片段或多或少相同 This method returns a list of all words from the dictionary that include the give
  • 如何在 Google 地球插件上放置 html div?我想涉及到wmode

    我遇到麻烦了在 Google Earth 插件上放置一个 html div在网络应用程序中 任何帮助将不胜感激 它适用于地图 地形和混合模式 但在 Earth 模式 Flash 启动并自动将地图分层在顶部 Z 索引没有帮助 想必我可以做这样
  • UseDefaultCredentials 与 Exchange Web 服务

    我是一个相当新的程序员 我在工作中承担的任务之一是使用我们的自定义工具来创建草稿电子邮件并将其放入运行该工具的用户的草稿电子邮件文件夹中 我们目前使用 Exchange Server 2010 但正在迁移到 Exchange Online
  • Ajax 错误:SyntaxError:预期表达式,得到“<”

    我正在尝试从我的服务器登录到另一台服务器到我的其他站点 但这个错误每次都会出现 SyntaxError expected expression got lt
  • NoMethodError:nil 的未定义方法“匹配”:NilClass

    我的申请有一个大问题 我的网站位于 AWS 上 今天早上我进行了上限生产部署以在线添加新版本 但我的网址不再有效 这对我来说是一个非常非常大的问题 所以我把我的问题放在这里 I use Ruby on Rails EC2 S3 and sh
  • 线程意外唤醒

    我预计以下示例中的第二个线程会挂起 因为它等待一个没有相应通知的对象 相反 它会进入 println 可能是由于虚假唤醒 public class Spurious public static void main String args T
  • 为什么这个 VBA 生成的 QR 码会卡顿? (仅限条形码-vba-宏)

    Context 我在用仅条形码 VBA 宏 https code google com archive p barcode vba macro only 在这个帖子 https stackoverflow com a 31663859 66
  • 如何使用 fpdf php 创建双条形图?

    我在我的 php 项目中使用 FPDF 我希望在我的项目中拥有像上图这样的 PDF 版本双条形图 FPDF 有一种方法可以创建饼图和条形图http www fpdf org en script script28 php http www f
  • 如何加快大型 xlsx 文件的导入速度?

    我想要处理一个 200MB 的大型 Excel xlsx 文件 包含 15 个工作表和 100 万行 每行 5 列 并根据数据创建 pandas 数据框 Excel 文件的导入速度非常慢 最多 10 分钟 不幸的是 Excel 导入文件格式
  • java将列表字符串写入csv文件

    我有一些如下所示的数组字符串 请注意 每个玩家后面都有空格 显示不同的行 user1 track1 player1 user1 track2 player2 user1 track3 player3 我想根据行数 此处为空格 将该数组分为两
  • 使用 win32com 从 Python 加载 Excel 加载项

    我从这里的各种问题中看到 如果使用以下命令从 Python 打开 Excel 实例 xl win32com client gencache EnsureDispatch Excel Application xl Visible True w
  • 长按ListFragment

    我正在使用 ListFragment 并执行 onListItemClick 一切正常 但现在我想使用长项目点击 例如 setOnItemLongClickListener new OnItemLongClickListener for a
  • 如何从对象中递归删除子对象?

    我正在研究解决方案 我已经创建了基本的树形表格 每当用户单击展开时 与单击的行相关的数据将根据行数据显示在其下方 我已经实现了展开 折叠至 N 个嵌套级别的基本功能 但我只遇到一个问题 所以基本上所有行都有基于具有多个值的数组的条件展开按钮
  • 为什么需要内存对齐? [复制]

    这个问题在这里已经有答案了 可能的重复 内存对齐的目的 https stackoverflow com questions 381244 purpose of memory alignment 我在网上读了一些关于内存对齐的文章 可以理解