有符号到无符号整数的类型双关可以通过消除 >= 比较的需要来加快边界检查速度吗?

2024-02-16

假设我的程序中有一个对性能非常关键的循环,我需要检查一个点是否在矩形内,但我知道在编译时下限始终为 0,如下所示:(x >= 0 && y >= 0 && x < width && y < height)

我可以通过将 x 和 y 类型双关为无符号整数来消除前两个比较吗(例如使用类似的东西)reinterpret_cast<>() or a union在 C++ 中),因为符号位将保证任何负数都会变成unsigned int大到足以无法通过边界检查?如果是这样,您将如何用 C++ 或其他语言实现它?通过这样做你能获得任何性能提升吗?


是的,当您测试有符号整数并且下限为零时,这是一个完全有效的优化。事实上,这是一种常见的优化,您的编译器几乎肯定会自动执行此操作;自己混淆代码很可能是毫无意义的过早优化。

我刚刚在 GCC 4.9 上对此进行了测试,并通过检查生成的汇编代码确认它在以下位置自动执行此优化-O1以上。我希望所有现代编译器都能这样做。

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

有符号到无符号整数的类型双关可以通过消除 >= 比较的需要来加快边界检查速度吗? 的相关文章

随机推荐

  • 在 R 中打印小于或等号?

    我尝试使用 u2264对于小于或等号 gt names table A1 lt c x P X x P X u2264x gt print table A1 但这出现在输出中 gt x P X x P X x gt 1 2 0 562 0
  • 在 JavaScript 中从字符串生成随机数

    我想制作一个客户端 A B 测试库 每个用户都有一个存储在 cookie 中的随机数 每个测试都有一个测试名称和一系列选项 我需要一个函数 根据用户的随机数 测试名称和选项来选择随机选项 当然 该函数必须始终为给定的一组输入返回相同的选项
  • iTunesConnect Testflight 没有适用于 iOS 的版本?

    我在向我的 iOS 版本之一添加管理员时遇到问题 当我点击我的构建时 它显示我有 2 个人可以测试它 但这不是我所期待的 我期待 3 个人 因为如果我单击 iTunesConnect 用户 我会看到 3 个人 但由于某种原因 我的朋友Yu
  • jQuery 中 HTML 表单标签的有效/无效名称是什么?

    这是我在这里遇到的错误的结果jQuery form serialize 仅返回序列化表单的一个元素 https stackoverflow com questions 1290011 jquery form serialize return
  • JPA 参照完整性约束违规 oneToMany 和批量操作查询

    My domain model diagram looks like this 正如您所看到的 我在学生和出勤之间以及出勤和研讨会之间有一个一对多的关系 下面是学生类和出勤类 以及我的帮助类 初始化程序 package com semina
  • 音频编程入门[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • MYSQL LEFT JOIN 与 GROUP BY

    我有 2 个查询 我需要加入它们 我需要将员工根据活动的工作时间与公司在规定时间段内同一活动的总工作时间进行比较 第一个查询是 SELECT u login a article p p article SUM p p going SUM p
  • 创建与时间相关的圆圈动画

    嗨 我尝试制作动画 调用函数时绘制的 3 个圆圈之一应从右向左移动 首先应在画布上绘制一个随机 黄色 蓝色或橙色 圆圈 然后在 3 秒后绘制下一个随机圆圈 然后在 2 秒后 8秒到现在为止 我怎样才能做到这一点 现在 当主循环再次开始运行时
  • 将 init() 设为 NSObject 子类私有

    班上FooClass应该只允许通过其交互sharedInstance 我试图通过不允许任何人访问来防止滥用init of FooClass 我尝试了几种不同的方法 但没有一个有效 使用私有关键字 class FooClass NSObjec
  • curl 如何基于本地 gcloud 的 CLI 身份验证向 Google Cloud 进行身份验证?

    我的脚本使用了一系列gcloud命令 当然 gcloud 已经过身份验证 我需要使用curl来访问gcloud无法使用的GCP REST API 我可以通过在 Cloud Console 中生成 JSON 凭据文件来完成此操作 但我不想将其
  • 使用 C++ 自动 Lua 绑定

    我正在构建一个简单的 2D 游戏引擎 它变得越来越大 暴露 Lua 中的所有功能将是不可能的 所以我试图自动化一点这个过程 无论如何 是否可以一次从堆栈中获取所有 n 个参数 具有不同类型 并将它们直接注入到 C 函数中 我已经自动化了函数
  • Jax-RS 重载方法/路径执行顺序

    我正在为我的应用程序编写一个 API 我对 Jax RS 如何处理某些场景感到困惑 例如我定义了两条路径 Path user name a zA Z and Path user me 我指定的第一条路径清楚地包含第二条路径 因为正则表达式包
  • Django多表继承和模型创建

    我有一些代码遵循文档页面上给出的多表继承示例 http docs djangoproject com en dev topics db models multi table inheritance http docs djangoproje
  • MVC , Asp.net 中的波斯日历

    我在 MVC 中使用 DateTime 变量 我想显示波斯日历 Html EditorFor x gt x ProductionDate 我该怎么做 我找到了解决方案1 前往www amib ir weblog page id 316 ht
  • 如何将屏幕录制成 gif 格式? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这就是我正在谈论的例子 你怎么能做到这一点 这取决于您的平台 并且有很多方法可以做到这一点 在 Mac OSX 上 有一个内置的 Quic
  • 使用 Cartopy 获取投影地图中的坐标

    我正在尝试使用 Cartopy 获取地图特征的坐标 但我想获取地图投影坐标而不是原始投影中的数据 例如 import matplotlib pyplot as plt import cartopy crs as ccrs fig plt f
  • 如何修复有关“strictQuery”的 Mongoose 弃用警告

    当我开始构建后端服务器时 我收到此弃用警告 但它显示我已连接到数据库 File 服务器 js const dotenv require dotenv const mongoose require mongoose const app exp
  • 在 Rails 中使用 Bootstrap Sass 时出错

    我正在开发一个简单的 ruby on Rails 应用程序 但收到以下错误 TypeError Cannot read property process of undefined in home saasbook Documents pro
  • Eclipse 中出现“无法加载 javah”错误

    我尝试在 Eclipse 中的 ant 构建文件中使用 javah 任务 但不断收到以下错误 构建失败 C sandbox build jni xml 7 无法加载 javah 这是我的 build jni xml 文件
  • 有符号到无符号整数的类型双关可以通过消除 >= 比较的需要来加快边界检查速度吗?

    假设我的程序中有一个对性能非常关键的循环 我需要检查一个点是否在矩形内 但我知道在编译时下限始终为 0 如下所示 x gt 0 y gt 0 x lt width y lt height 我可以通过将 x 和 y 类型双关为无符号整数来消除