ARM 未对齐内存访问解决方法

2023-11-23

我必须将源代码移植到运行 Linux 的 ARM 平台。不幸的是我遇到了未对齐的内存访问问题。源代码大量使用指针转换和访问。

像下面这样的代码已经像病毒一样在代码库中传播。多亏了 gcc,我可以查明有问题的位置-Wcast-align命令行选项,但有超过一千个实例需要经历。

u = (IEC_BOOL);
(((*(IEC_LINT*)pSP).H < b.H) 
   || (((*(IEC_LINT*)pSP).H == b.H) && ((*(IEC_LINT*)pSP).L < b.L) )) ? 1 : 0);
*(IEC_DWORD OS_SPTR *)pSP = 
    (IEC_DWORD)(*(IEC_DWORD OS_SPTR *)pSP >> u);  
*(IEC_DWORD OS_SPTR *)pSP = 
    (IEC_DWORD)(*(IEC_DWORD OS_SPTR *)pSP << -u);  
u = (IEC_BYTE)((*(IEC_DINT*)pSP != b) ? 1 : 0);  
*(IEC_DWORD*)pSP = (IEC_DWORD)(*(IEC_DWORD*)pSP & w);  
(*(IEC_ULINT*)pSP).H += u.H;   
(((*(IEC_ULINT OS_SPTR *)pSP).H == b.H) 
    && ((*(IEC_ULINT OS_SPTR *)pSP).L > b.L))) ? 1 : 0);
u = (IEC_BYTE)((*(IEC_REAL*)pSP >= b) ? 1 : 0);

Using echo 2 > /proc/cpu/alignmenton 使 Linux 内核修复问题,但应用程序的性能下降到不再可接受的程度。

我在网上搜索了类似的东西__unaligned or __packedGCC (v4.4.1) 编译器的关键字,但到目前为止仍为空。

我认为很多有问题的代码行可以通过或多或少复杂的正则表达式/替换来修复,但现在,在这样做了一段时间之后,我发现这种方法也将需要大量繁琐的工作。

你们对如何完成这项工作有什么建议吗?我认为 gcc 4.5 编译器插件有点过分了,但是有比正则表达式更好的东西吗?你还能提出什么其他建议?不一定所有问题实例都必须得到修复,因为我仍然可以依靠内核来解决一些罕见的情况。


__attribute__((__packed__))这在某些情况下可能会有所帮助,但我确实认为应该尽早清理这段代码,因为您可能会花更多的时间来解决问题,而不是一劳永逸地解决问题。

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

ARM 未对齐内存访问解决方法 的相关文章

  • Qt - QProcess 不工作

    我尝试启动 Internet Explorer 所以我使用下面的代码 QProcess process new QProcess this QString temp C Program Files Internet Explorer iex
  • 尝试了解使用服务打开对话框

    我已经阅读了有关使用 mvvm 模式打开对话框的讨论 我看过几个使用服务的示例 但我不明白所有部分如何组合在一起 我发布这个问题寻求指导 以了解我应该阅读哪些内容 以更好地理解我所缺少的内容 我将在下面发布我所拥有的内容 它确实有效 但从我
  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • 在 CPP 类中将 C 函数声明为友元

    我需要在 C 函数中使用类的私有变量 我正在做这样的事情 class Helper private std string name public std getName return name friend extern C void in
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • 现代 C++ 编译器是否能够在某些情况下避免调用 const 函数两次?

    例如 如果我有以下代码 class SomeDataProcessor public bool calc const SomeData d1 const SomeData d2 const private Some non mutable
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • extern 声明和函数定义都在同一文件中

    我只是浏览了一下gcc源文件 在gcc c 我发现了类似的东西 extern int main int char int main int argc char argv 现在我的疑问是extern是告诉编译器特定的函数不在这个文件中 但可以
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 将 Word 转换为 PDF - 禁用“保存”对话框

    我有一个用 C 编写的 Word 到 PDF 转换器 除了一件事之外 它工作得很好 有时 在某些 Word 文件上 后台会出现一条消息保存源文件中的更改 gt 是 否 取消 但我没有对源文件进行任何更改 我只想从 Word 文件创建 PDF
  • 将函数参数类型提取为参数包

    这是一个后续问题 解包 元组以调用匹配的函数指针 https stackoverflow com questions 7858817 unpacking a tuple to call a matching function pointer
  • Visual Studio 2015:v120 与 v140?

    仅供参考 Win10 x64 我今天开始尝试 Visual Studio 2015 在弄清楚如何运行 C C 部分后 我尝试加载一个大型个人项目 该项目使用非官方的glsdk http glsdk sourceforge net docs
  • 如何在 sql azure 上运行 aspnet_regsql? [复制]

    这个问题在这里已经有答案了 可能的重复 将 ASP NET 成员资格数据库迁移到 SQL Azure https stackoverflow com questions 10140774 migrating asp net membersh
  • 我可以使用 lambda 函数或 std::function 对象来代替函数指针吗?

    我有一个需要使用的库 它定义了以下内容 typedef void CallbackFunction const int i 并且有一个注册回调的函数 如下所示 void registerCallback CallbackFunction p
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的

随机推荐

  • 如何刷新 UITableViewController 或 NSFetchedResultsController?

    我的 UITableViewController 或 NSFetchedResultsController 有一点问题 我不确定问题出在哪里 但我猜是 UITableViewController 正如我所说 我使用 NSFetchedRes
  • 从内存中打开?

    我正在寻找一种直接从内存加载生成的目标代码的方法 我知道 如果我将其写入文件 我可以调用 dlopen 来动态加载其符号并链接它们 然而 考虑到它从内存中开始 写入磁盘 然后由 dlopen 重新加载到内存中 这似乎有点迂回 我想知道是否有
  • Android Studio - 无法应用插件 [id 'com.android.application']

    我正在开发一个应用程序 在我的应用程序中 代码中没有错误 但是当我尝试运行我的项目时 它给出了以下错误 错误 1 1 评估项目 app 时出现问题 无法应用插件 id com android application 无法创建 AppPlug
  • 将 REINSTALLMODE 传递到 MSI 文件

    我正在使用 VisualStudio2005 和 vdproj 创建一个简单的 MSI 文件 当我启动它时 我需要传入 REINSTALLMODE 属性 我知道这可以通过命令行完成 如下所示 msiexec exe i foo msi RE
  • 使用 data.table 加速 rollapply

    我是 data tables 的新手 所以如果这是一个非常基本的问题 我深表歉意 我听说 data tables 在处理大量数据时显着提高了计算时间 因此想看看 data table 是否能够帮助加快 rollapply 函数的速度 如果我
  • Rails 3 link_to 路由(编辑)嵌套资源

    抱歉 如果其他地方有人问过这个问题 但我无法弄清楚 我有一个包含版块 主题和回复的论坛 我正在尝试从显示主题视图中编辑和删除回复 这是结构 resources sections do resources topics do resource
  • 如何将静态二维数组的指针传递给结构/类?

    当我尝试将数组的指针 其中包含程序中某些函数所需的参数 传递给结构时遇到问题 然后该结构应该传递给这些函数 例如 GSL 希望我以这种方式传递参数 一个小示例程序如下所示 include
  • 如何展开使用 R 中的 igraph 包制作的社区图

    尝试在推文数据中查找社区 不同单词之间的余弦相似度形成邻接矩阵 然后 我根据该邻接矩阵创建了图 图表的可视化是这里的任务 Document Term Matrix dtm DocumentTermMatrix tweets adjust t
  • 对静态文件的请求正在命中 ASP.NET MVC3 中的托管代码

    创建自定义 IHttpModules 时 我意识到对静态文件 例如 css 和 js 文件 的请求正在访问托管模块 可能图片也有同样的问题 IIS 不应该绕过 ASP NET 来获取文件系统中存在的文件吗 例如 public class M
  • 如何将字符串中的空格分隔数字序列转换为整数

    我正在尝试使用将字符串元素转换为整数stoiC 11 中的函数并将其用作参数pow函数 像这样 include
  • Android应用程序更新通知

    我一个月前将我的应用程序上传到 Android 市场 现在我已经上传了它的新版本 我的设备上安装了旧版本 但我没有收到更新通知 当我将应用程序更新到 Android Market 时 是否有任何选项可以向用户发送更新通知 不是默认情况下 市
  • 我应该通过任何方式避免 Django 中的多表(具体)继承吗?

    许多经验丰富的开发人员建议不要使用Django多表继承由于其性能不佳 Django 陷阱 具体继承 by 雅各布 卡普兰 莫斯 Django 的核心贡献者 几乎在所有情况下 抽象继承都是更好的方法 长期来看 我见过不少网站在负载下崩溃了 通
  • 如何使用 Java 邮件发送 html 消息

    我一直在从 Java 发送简单的电子邮件 没有问题 但我现在尝试发送一封 html 电子邮件 如下所示 MimeMessage message new MimeMessage Email getSession message setFrom
  • 如何在 Eclipse Mars 中禁用 css 警告“未知属性”?

    我在 css 文件中收到许多 未知属性 警告 这可能是由于我安装了 e fx clipse 2 0 和 Eclipse Web Developer Tools 如果我使用 e fx clipse css 编辑器打开 css 文件并添加 抑制
  • 删除特定字符串后的所有内容(文本的其余部分)

    我怎样才能删除像 gnirts 这样的字符串后面的所有内容 这可能会让您更好地理解 Before 之后 使用查找和替换 按 CTRL H 打开替换对话框 输入 gnirts 到Find what leave Replace with emp
  • 在不同的 .NET 框架之间共享记录器

    我正在创建一个可以在 Net Core 1 2 Net Core 2 0 和 NET Framework 4 6 之间共享的应用程序框架 所以我选择我的项目的目标框架为 NET Standard 在我的框架项目中 我有用于发送短信或电子邮件
  • 查找 Maven 模块化项目中未使用的代码

    我必须清理一个旧项目 一般知识是该项目包含许多我们可以删除的未使用的代码 这将减少一些麻烦并使维护变得更容易 我发现 Eclipse Core Tools 插件看起来是一个很棒的工具 但在我们的例子中 我们有一个 Maven2 项目 它分为
  • 使用 Mockito 模拟局部范围对象的方法

    我需要一些帮助 Example void method1 MyObject obj1 new MyObject obj1 method1 我想嘲笑obj1 method1 在我的测试中 但为了透明 所以我不想制作和更改代码 Mockito
  • 如何在OpenLayers中获取多边形的坐标

    我一直在寻找如何确定 OpenLayers 中组成多边形 要素 的点的坐标 假设我创建了一个像下面这样的多边形this例子 我需要知道组成多边形的点 这样我就可以将它们保存在某个地方 我敢打赌这很容易 我只是找不到任何东西 可能我不知道我应
  • ARM 未对齐内存访问解决方法

    我必须将源代码移植到运行 Linux 的 ARM 平台 不幸的是我遇到了未对齐的内存访问问题 源代码大量使用指针转换和访问 像下面这样的代码已经像病毒一样在代码库中传播 多亏了 gcc 我可以查明有问题的位置 Wcast align命令行选