ARM-CPU 是否需要特殊的指针修饰来进行未对齐访问?

2023-12-07

支持未对齐内存访问的 ARM-CPU 是否需要特殊的指针修饰来实现 C/C++ 中的未对齐访问?或者我可以使用每个指针进行未对齐访问吗?或者这取决于编译器?


简而言之,这是依赖于编译器的,因为 C 标准没有涵盖它。

然而,正如评论中所指出的,一些 ARM 指令需要对齐指针,并且任何 ARM 编译器都需要实现一些对齐策略。由于 ARM 处理器通过对齐访问可以更高效地工作,因此编译器通常会确保数据对齐。

编译器也可能提供处理非对齐数据的方法(当然,这又是编译器定义的行为,实现了 C 标准中未定义的行为)。常见的例子是打包结构和指针转换。

我们来看几个案例:

    __packed struct
    {
        char a;
        int i;
    } s;

在这种情况下,&s.i可能是一个未对齐的指针,这很好,因为编译器知道这一点并可以相应地生成代码。

    char buffer[80];

    void decode(int *i)
    {
        int n = i[0];
        ...
    }

在这种情况下buffer可能未对齐(作为数组chars,没有必要),但是,如果编译器正常对齐ints,那么编译器会假设该指针*i in decode()已对齐并且可以基于该假设生成代码。

在这种情况下,调用decode((int *)buffer)可能会导致处理器出现硬故障。

因此,更长的答案是(至少在我知道的情况下)对齐/未对齐指针没有可见的“装饰”,但编译器可能会根据指针的类型和来源做出假设,从而有一种指针的内部“装饰”。在这种情况下,避免“欺骗”编译器做出错误的假设很重要。

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

ARM-CPU 是否需要特殊的指针修饰来进行未对齐访问? 的相关文章

随机推荐

  • 如何在“func renderer(SCNSceneRenderer, nodeFor: ARAnchor) -> SCNNode”中旋转 SCNNode?

    因此 我能够在锚点位置放置一个盒子节点 现在 如何旋转场景中的 SCNNode 我试图修改节点的变换和 eulerAngles 但它们没有效果 func renderer renderer SCNSceneRenderer nodeFor
  • 位图图像处理

    我想使用 LockBits 方法替换 GetPixel 和 SetPixel 所以我遇到了这个F 惰性像素读取 open System Drawing open System Drawing Imaging let pixels image
  • Xquery 中的标记化

    如何标记特殊字符 例如 and 在 xquery 正如我正在努力Tokenize这些特殊字符 我无法做到这一点 你能建议我解决这个问题吗 您必须像在 XML 中一样转义 符号 tokenize string amp 或者 您也可以使用它的
  • 通过触摸或手势识别移动 RecyclerView

    我正在尝试移动和扩展 RecyclerView 以便内容在触摸输入的基础上占据全屏 我希望 RecyclerView 保持左右滚动的能力 我无法让 GestureDetector 与 RecyclerView 一起正常工作 捕获 onScr
  • iOS:在 uiimage 上具有发光/阴影效果的羽毛

    我正在尝试找到一种方法来应用带有阴影的羽毛效果UIImage not UIImageView我在iOS上遇到过 目前还没有找到完美的解决方案 我有一个想法 这可以通过屏蔽来完成 但我对这很陌生CoreGraphics 如果有人可以帮忙的话
  • 使用 django:代理设置

    我有一个使用 apache 的本地开发 django 设置 问题是 在部署服务器上没有代理 而在我的工作场所 我在 http 代理后面工作 因此请求调用失败 有没有什么方法可以使请求库中的所有调用都通过代理进行 我知道如何使用代理参数向各个
  • Spring事务通过连接多个数据库

    我正在尝试开发一个小程序 在该程序中我可以使用 Spring 连接到多个数据库 并尝试通过在 weblogic 服务器上部署我的 Web 应用程序来使用 Spring 事务 问题是事务管理无法正常工作 我试图在两个数据库中插入记录 第一个数
  • Identity Core 主键为 Int 无法使用 SignInManager

    我想做的是 使用 Identity Core 设置登录 注销 主键为 Int 我按照 ASP NET Core 文档中的以下文章进行操作 配置身份主键数据类型 他们使用 GUID 但想法是相同的 设置非常成功 ID 是整数并且数据库正在填充
  • 如何阻止递归复合组件递归地包含自身

    是否可以有一个具有 ui repeat 的 JSF 组件 并且在重复中调用相同的组件 这是因为我正在构建问题树
  • 使用vbscript将汉字写入文本文件

    我正在尝试使用以下命令将一些汉字写入文本文件 Set myFSO CreateObject Scripting FileSystemObject Set outputFile myFSO OpenTextFile getOutputName
  • Struts2中的tiles.xml中是否可以有动态值

    是否可以像在 Struts2 中的 struts xml 中那样在tiles xml 中传递动态值 我已经使用 parameter 来获取配置文件中的动态值 但它似乎不起作用 有任何想法吗 您可以将通配符从 struts 操作传递给图块 我
  • python 和 sqlite3,检查我是否可以使用 fts5 扩展?

    我最近发现FTS5扩展已发布 检查我的应用程序是否可以在用户系统上使用它的最佳方法是什么 只需检查 python3 版本 或根据 sqlite3 sqlite version 检查发布页面 或者是其他东西 这是之前对OP帖子的编辑 但我将其
  • 如何获取子元素的个数?

    我正在尝试计算 div 中具有 test 类的元素数量 我有 div ddd div class test 111 div another div div div div class test 222 div div class test
  • 将常量整数添加到 python 字典中的值

    如果满足某些条件 如何将常数 例如 1 添加到字典中的值中 例如 如果我有一本字典 dict 0 3 1 3 2 4 3 4 4 4 如果我只是想将整数 1 添加到字典中的每个值 那么它将更新 dict 如下 dict 0 4 1 4 2
  • 使用 Here 地图在 Android 中添加下载离线地图

    我已经开发了一个 Android Here 地图 它有一个简单的地图视图 但我需要向应用程序添加离线支持 如何将其添加到我的应用程序中以便让用户下载特定的国家或地区 请注意 我使用以下链接中的教程实现了我的应用程序 https develo
  • Eclipse 中奇怪的自动生成的 getter 和 setter

    当我在 Eclipse 中使用自动生成 getter setter 来生成名称如下的类字段时 String lAttr它会产生这个 public String getlAttr return lAttr public void setlAt
  • 为什么 sizeof(string) == 32?

    导致 sizeof 为 32 的字符串结构中的开销是多少 Most modern std string implementations1 save very small strings directly on the stack in a
  • 获取 android home widget 中 TextView 的文本(不在 Activity 中)?

    我刚刚开始使用 android home widget 进行编程 因此我可以通过 settextviewtext 从我的 widget 提供程序将文本设置为 home widget 中的文本视图 但是当我想从中获取文本时 我没有理想的 无法
  • 使用 C++ 在 Qt3D 中创建多个视口时出现问题

    我正在尝试使用 C 设置具有多个视口的 Qt3DWindow 根据文档和提供了 QML 示例 我需要做的就是创建一个框架图 其中一个主要的 QViewport 对象分支为几个 RenderView 第一个 RenderView 包含 QCl
  • ARM-CPU 是否需要特殊的指针修饰来进行未对齐访问?

    支持未对齐内存访问的 ARM CPU 是否需要特殊的指针修饰来实现 C C 中的未对齐访问 或者我可以使用每个指针进行未对齐访问吗 或者这取决于编译器 简而言之 这是依赖于编译器的 因为 C 标准没有涵盖它 然而 正如评论中所指出的 一些