C++ 中的内联 ntohs() / ntohl() / Boost ASIO

2024-01-06

嗨,我正在使用 C++ / Boost ASIO,我必须内联ntohl()出于性能原因。每个数据包包含 256 个 int32,因此需要大量调用ntohl()。有人这样做过吗?

以下是 VC10++ 的编译后的程序集输出,所有优化均已打开:

;  int32_t d = boost::asio::detail::socket_ops::network_to_host_long(*pdw++);
mov      esi, DWORD PTR _pdw$[esp+64]
mov      eax, DWORD PTR [esi]
push     eax
call     DWORD PTR __imp__ntohl@4

我也尝试过常规的ntohl()由 winsock 提供。任何帮助将不胜感激。

另外,我一直在思考 C 的方式#define执行简单 int32 桶移位的宏(如果网络顺序在编译时与机器顺序不匹配)。如果有人知道并且可以提供最有效的组装ntohl()在 x86 / x64 架构上,那就太棒了。最终我的代码也需要移植到 ARM。


x86-32 和 x86-64 平台具有 32 位“bswap”汇编指令。我不认为你会比一次手术做得更好。

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

C++ 中的内联 ntohs() / ntohl() / Boost ASIO 的相关文章

随机推荐

  • Android NDK OpenGL 应用程序的浮点还是定点?

    我正在尝试决定是否对我的应用程序 大部分是 C 中的所有 3D 相关元素主要使用浮点数还是整数 据我所知 大多数基于 ARM 的设备没有硬件浮点支持 因此我认为任何使用浮点的繁重工作都会明显变慢 然而 我计划在大部分情况下准备所有数据 即在
  • TeamCity LocalService PFX 程序集签名 - 在何处安装证书

    我一直在研究这个问题 虽然我找到了一些 解决方案 但似乎很多 解决方案 都是偶然发现的 或者无法充分解释真正有效的方法 我已经尝试了多种解决方案 但仍然遇到问题 我在 Visual Studio 中创建了一个 PFX TeamCity 和
  • Facebook 延迟深度链接在 iOS 上是否有效?如何在应用商店发布应用程序之前对其进行测试?

    我在 iOS 上遇到 Facebook 延迟深度链接问题 深层链接有效 但延迟深层链接不起作用 我已经阅读了很多关于这个问题的内容 但仍然找不到解决方案 我已经设置了深层链接并且有效 当我也尝试测试深度链接时应用广告助手 https dev
  • 在 Sequelize Model.create 上设置 raw = true

    我希望能够在调用后接收普通的原始对象Model create在 Sequelize 上 创建的对象本身 没有元数据或任何其他东西 就像 raw true 选项中Model find 我已经看过这个答案 将所有查询设置为 raw true S
  • 在 NetworkX 中同时创建属性和边(如果存在相同的属性)

    在 NetworkX 中创建节点后 如果两个节点 至少 具有一个重叠的相同属性 我想在节点之间添加边 这似乎是一个问题 并非所有节点都包含相同数量的属性 可能是这种情况 如果是 我应该如何解决 import networkx as nx f
  • Java 获取默认 UI 颜色

    例如 我如何找到 JList 中的默认选择颜色 这些颜色存储在哪里 对于 Swing 组件 您可以在应用程序范围内获取和设置默认颜色UIDefaults http download oracle com javase 6 docs api
  • 刷新令牌如何比长期存在的 JWT 更安全?

    在将 JWT 与自然不安全的客户端 浏览器 手机等 一起使用时 我很难理解刷新令牌的使用 对我来说 如果 JWT 被泄露 那么刷新令牌也不会被泄露 这种想法似乎很天真 只要刷新令牌保持有效 攻击者本质上就拥有无限的 JWT 来源 即使您使使
  • Sql 密码生成器 - 8 个字符,大写和小写,包括数字 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我需要在 SQL 中创建一个新密码
  • 类声明与构造函数内初始化对象的区别

    我正在为我的对象进行对象初始化和构造函数初始化 但无法得到我的问题的准确答复 这里Case1和Case2有什么区别 Case 1 namespace ConsoleApplication2 class MyBuilder private M
  • 覆盖我的可观察变量会杀死当前订阅者吗?

    我希望能够缓存 http 调用 但也强制刷新缓存 我的服务如下所示 Injectable export class UserService private currentUser Observable
  • 如何在 python 多处理中创建共享的二维数组

    我需要使用 python 的多重处理来处理一个大矩阵 这就是说我需要二维数组 该数组应该由不同的子进程以同步方式共享 访问 更新 因此我使用mp Manager 在创建数组时 multiprocess Array 让我创建一个一维数组 我尝
  • .NET 的自然语言日期/时间解析器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道 NET 日期 时间解析器类似于Ruby 的慢性病 http chronic rubyforg
  • 如何禁用 UIButton?

    我正在开发一个项目 其中我必须在 plist 中显示照片库的所有照片 并在UIButtons 我的应用程序还将有一个编辑按钮 当用户单击此按钮时 每个按钮上应显示删除标记 例如通常出现在其他 iPhone iPad 应用程序中 但关键的是
  • 如何将 put 的输出作为输入提供给过程?

    我有一个将列表打印为格式化表格的过程 它有像 print table temp 这样的用例 我如何给出不同过程的输出 其中我使用 puts 命令打印输出作为该过程 print table 的输入 set list1 abc 1 defg 2
  • CoreData ManagedObjectContext 递归保存错误

    我的一些用户在执行保存时遇到 CoreData 错误 我无法在网上找到有关此错误或如何符号化堆栈跟踪的任何信息 错误信息是attempt to recursively call save on the context aborted sta
  • 如何在keras中记录val_loss和每批次的损失

    我正在使用keras中的回调函数来记录loss and val loss每个纪元 但我想按批次做同样的事情 我发现了一个回调函数on batch begin self batch log 但我不知道如何使用它 这是自定义回调的示例 遵循并修
  • 无法打开输入文件

    我正在编写一个基本程序 它将从文本文件中读取整数列表 并将文件中的最小整数和最大整数输出到屏幕 我确保文本文件与源代码文件位于同一文件夹中 并且文件的名称与我在代码中调用的名称相同 无论如何 程序都无法打开该文件 我怎样才能解决这个问题 这
  • 方法提取会对代码性能产生负面影响吗?

    假设你有一个很长的方法 大约有 200 行对时间非常敏感代码 将代码的某些部分提取到单独的方法中是否可能会减慢执行速度 最有可能的是 你会得到加速 问题是优化 200 行的野兽是很困难的 实际上 当方法太长时 Hotspot就会放弃它 有一
  • Android 类解析中的奇怪事情

    我在 Android 上观察到相当多的行为 我正在处理 multidex 问题 所以我在 4 4 4 中使用模拟器 这让我对 Android 类加载无语 Android 上的类有not应该在被类加载器加载时解析 但是如果我创建一个类 pub
  • C++ 中的内联 ntohs() / ntohl() / Boost ASIO

    嗨 我正在使用 C Boost ASIO 我必须内联ntohl 出于性能原因 每个数据包包含 256 个 int32 因此需要大量调用ntohl 有人这样做过吗 以下是 VC10 的编译后的程序集输出 所有优化均已打开 int32 t d