如何确定我是否过度括号?

2024-03-20

我目前正在尝试避免 C 中的指针算术工作来编写模拟器。

通常,如果您添加1对于 C 中的指针,您可以添加所指向对象的大小。但是,我正在尝试使用位和字节,因此这是不希望的。

我想知道在这个例子中我是否使用了太多括号:

*(int16_t *)(((intptr_t)bc)+sp)

如果不是,那么它相当于这个吗? :

*(int16_t *)((intptr_t)bc+sp)

sp是我的模拟器的页面对齐堆栈地址(通过获取)mmap没有MAP_FIXED放)。它是一个intptr_t type.

bc是一个名字int16_t *类型。它是一个指向两个组合的指针int8_t's.


(((intptr_t)bc)+sp)相当于((intptr_t)bc+sp).


但整个“避免指针算术”方法是不可移植的。

至少有 3 个担忧:

  • 转换为整数的指针不一定能保持所需的数学属性。

    // possible outcome
    uint16_t x[2];
    printf("%llx\n", (unsigned long long) (intptr_t) &x[0]); // --> abcd0000
    printf("%llx\n", (unsigned long long) (intptr_t) &x[1]); // --> abcd0010
    

作为整数的差异可能是 16,而不是希望的 2——即使 2 的差异更为常见。

  • 进一步地,与*(int16_t *)((intptr_t)bc+sp), if sp是奇数,(int16_t *)由于对齐限制可能会失败。

  • 抗锯齿问题也会发生。@安德鲁·亨利 https://stackoverflow.com/questions/55419302/casting-behavior-in-c/55419552#comment97557988_55419302

虽然整数避免指针运算有各种陷阱 - 祝你好运。

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

如何确定我是否过度括号? 的相关文章

随机推荐

  • RMarkdown 无法编织:找不到 html_dependency

    我正在尝试使用创建一个 html 文件RMarkdown 使用 RStudio 中的示例 Rmd 当我点击Knit 我收到以下消息 错误 找不到 html dependency 的路径 执行已停止 我尝试卸载并重新安装 R 和 RStudi
  • 如何向AudioQueue提供音频缓冲区来播放音频?

    在我的应用程序中 我正在接收需要播放的线性 PCM 格式的音频数据 我正在关注 iOS SpeakHere 示例 但是我不知道应该如何以及在哪里提供缓冲区AudioQueue 谁能给我提供一个在 iOS 中播放音频缓冲区的工作示例Audio
  • 为什么在调试模式下 List<>.OrderBy LINQ 比 IComparable+List<>.Sort 更快?

    我感兴趣的是使用 LINQ 对类进行排序更快 还是通过实现 IComparable 接口和 List Sort 更快 当 LINQ 代码更快时 我感到非常惊讶 为了进行测试 我创建了一个非常简单的类 使用不太恰当的名称 TestSort 实
  • 如何以编程方式获取 Camera RAW 元数据信息 Android

    我有一个应用程序 它以编程方式设置相机的硬件参数 然而 据我所知 并且观察到 并非所有芯片组都支持所有参数 例如 Nexus 4 高通 具有清晰度和清晰度最大参数 而 Galaxy Note II 3g 则没有 因此 当我设置清晰度参数时
  • 在 C++ 中模拟 CLOS :before、:after 和 :around

    CLOS 有一个简洁的 before after 和 around 方法概念 before 方法在主要方法之前调用 after 方法在主要方法之后调用 around 方法是围绕 before primary after 序列调用的 befo
  • 计算 R 数据帧列中变量值的唯一组合[重复]

    这个问题在这里已经有答案了 我想计算每个组中出现的变量的唯一组合 例如 df lt data frame id c 1 1 1 2 2 2 3 3 4 4 4 5 6 6 7 7 7 status c a b c a b c b c b c
  • 翻转图标并反向旋转

    里面有一个图标真棒字体集 http fortawesome github io Font Awesome 我想要水平翻转 然后朝该方向旋转 这与常规旋转效果相反 有很多种方法可以做到每一种 但据我所知没有一种方法可以同时做到这两点 因为效果
  • 如果子查询在 MySQL 中返回多于 1 行,如何将 JSON 放入列数据中

    我想使用与我用于选择用户的相同查询来选择用户组合 这是我想要的例子 用户表 UID NAME USERNAME EMAIL PASSWORD STATUS 1 Manoj manoj email protected cdn cgi l em
  • 确定表中偶数/奇数行的更好方法

    假设您有一个包含以下示例代码的网页 tr class even td something1 td td somthing1 1 td tr tr class odd td something2 td td b something2 1 b
  • 错误消息“无法构建模块‘Foundation’”

    我搜索了这个问题 但找不到太多帮助 Error 无法构建模块 Foundation import
  • 如何获取 iOS 中任意线程的正确帧指针?

    获取帧指针的方法 在 iPhone 5s 设备 Xcode 7 上运行的演示应用程序上 我尝试获取frame pointer of an 随意的线程使用thread get state http web mit edu darwin src
  • 设计师如何创建 Line 小部件?

    在 Qt Designer 中 您可以拖动 Line 小部件 这将在您的布局中创建一条线 但我检查了文档和标题 我没有找到 Line 标题 小部件 它是什么 在 Qt 5 7 中 Qt Designer 为水平线生成的代码 可以使用 For
  • 在外部项目上使用 find_package()

    我有一个名为的外部项目messages 我正在使用ExternalProject Add 来获取和构建项目 如果我使用find package messages REQUIRED 在顶层 CMakeLists txt 中cmake 失败是因
  • 如何使用 Win32 API 将 EDIT 控件放入自定义弹出窗口中?

    我正在尝试将 EDIT 控件添加到用作自定义组合框式控件的下拉列表的窗口 最初这个下拉窗口是作为子窗口实现的 WS CHILD 桌面窗口 类似于真正的组合框使用的 ComboLbox 窗口 这工作得很好 但是当编辑窗口放入这样的下拉窗口时
  • 设计时发生火灾事件?

    我目前正在设计一个派生自 System Windows Forms Control 的自定义选项卡控件类 问题是在设计时没有触发任何事件 至少我测试过的事件 包括鼠标事件和键盘事件 这对我来说是一个问题 因为无法在设计器中的选项卡页面之间切
  • scikit-learn 中聚类超参数评估的网格搜索

    我正在对大约 100 条记录 未标记 的样本进行聚类 并尝试使用 grid search 来评估具有各种超参数的聚类算法 我正在使用得分silhouette score效果很好 我的问题是我不需要使用交叉验证方面GridSearchCV R
  • 无法从角 4 快速插入法律归属

    我是 Xcode 和移动应用程序的新手 我正在做一个应用程序来查找当前位置 我在模拟器上测试了它并在控制台中收到了此消息 无法从角 4 插入合法归属 这是什么意思以及如何解决它 import UIKit import Alamofire i
  • 未检测到已安装的组件。元素已经是另一个元素的子元素

    在 App xaml 中 我添加了带有按钮的应用程序资源
  • 如何使用Oracle和.Net客户端实现密码更改功能?

    我正在使用 Oracle 用户来验证 Net 应用程序的用户名和密码 现在我正在研究密码更改功能 数据库具有自定义密码验证 因此如果您尝试更改用户密码并且提供了无效密码 Oracle 将返回多个错误 第一个错误始终是 ORA 28003 指
  • 如何确定我是否过度括号?

    我目前正在尝试避免 C 中的指针算术工作来编写模拟器 通常 如果您添加1对于 C 中的指针 您可以添加所指向对象的大小 但是 我正在尝试使用位和字节 因此这是不希望的 我想知道在这个例子中我是否使用了太多括号 int16 t intptr