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 的相关文章

  • 具有相同参数类型但具有不同常量限定符的 std::vector 的转换

    问题很简单 静态转换 或其他一些转换 通常是安全的 std vector lt Foo gt to std vector lt const Foo gt 就二进制而言 我不明白为什么本机类型会有所不同 毕竟const是一种语言约束 不应影响
  • .NET 单点登录

    我一直在尝试使用 C 为 NET Web 应用程序实现 WEB SSO 服务提供程序插件 我将使用 shibboleth 身份提供商 我已经使用 OpenSAML 库为 java 应用程序实现了相同的功能 我想知道在 NET 应用程序中使用
  • 为什么我会收到未找到分析器的警告?

    我创建了一个玩具项目来检查最新的 NET 7 预览版 5 和正则表达式代码生成 它效果很好 所以我对现有项目应用了相同的更改 不是为了生产 而是为了个人生产力 由于某种原因 我收到这些警告 CS8032 An instance of ana
  • 如何在特定时间以毫秒精度触发 C# 函数?

    我有两台计算机 它们的时间通过 NTP 同步 确保时间仅相差几毫秒 其中一台计算机将通过 TCP 向另一台计算机发送一条消息 以在两台计算机上的未来指定时间启动某个 c 函数 我的问题是 如何在特定时间以毫秒精度 或更好 触发 C 中的函数
  • STL之类的容器typedef快捷方式?

    STL 容器的常见模式是这样的 map
  • NDK 应用 onDestroy 清理 - 如何 DetachCurrentThread

    因此 如果我们连接 我们必须在完成后分离线程 对吗 JNIEnv get jni env JNIEnv res JAVA VM gt GetEnv void res JNI VERSION 1 6 Using cached JavaVM J
  • 将公历日期转换为儒略日期,然后再转换回来(随着时间)

    我正在编写一个程序 必须将当前的公历日期和时间转换为儒略日期 然后再转换回公历门 最终我需要添加能够添加年 月 日 小时 分钟和秒的功能 但我需要先解决这部分问题 现在我已经从公历日期转换为儒略日期 所以从逻辑上讲 我觉得我应该能够以某种方
  • 在没有 epsilon 的情况下可以将浮点数与 0.0 进行比较吗?

    我知道 要比较两个浮点值 需要使用一些 epsilon 精度 因为它们并不精确 但是 我想知道是否存在边缘情况 我不需要那个 epsilon 特别是 我想知道这样做是否总是安全的 double foo double x if x lt 0
  • opencv中如何去除二值图像噪声?

    将图像转换为二值图像 黑白 后如果有任何噪音怎么办 我消除了那些不需要的噪音 您可以看到下图的黑色区域内有一些白噪声 我该如何去除噪声 使用opencv http img857 imageshack us img857 999 blackn
  • Visual Studio 中列表框的上移、下移按钮[重复]

    这个问题在这里已经有答案了 我正在尝试制作一个上移按钮和一个下移按钮 以移动 Microsoft Visual Studio 2012 中列表框中的选定项目 我已经在 WDF jquery winforms 和其他一些表单中看到了其他示例
  • 对作为函数参数传递的指针使用删除

    删除作为函数参数传递的指针是否可以 并且合法 如下所示 include
  • 控制台应用程序中使用 Unicode 字符的 _tprintf

    我正在从 Unicode 构建的控制台应用程序 使用 C 和 Visual Studio 2008 执行这个简单的输出 此代码旨在在 Windows 上运行 tprintf L Some sample string n 一切正常 但是如果我
  • 调用异步方法在视图模型的构造函数中加载数据有警告

    我的视图包含一个 ListView 它显示来自互联网的一些数据 我创建一个异步方法来加载数据并在我的视图模型的构造函数中调用该方法 它有一个警告提示我现在使用await关键字 还有其他解决方案可以在构造函数中异步加载数据吗 有几种可以应用的
  • DataGridView 行背景颜色没有改变

    我想根据加载时的特定条件更改 DGV 行的背景颜色 即使在 Windows 窗体中也是如此 但我看不到任何 DGV 行的颜色有任何变化 谁能告诉我如何解决这个问题 private void frmSecondaryPumps Load ob
  • Gremlin.net 文本包含等效项

    我正在使用 Gremlin net 库连接到 janus 图形服务器 我使用 cassandra 和弹性搜索进行数据存储和索引 在我使用的 gremlin 语言和 gremlin 控制台中文本包含在属性的文本中进行搜索 我正在使用混合索引
  • 如何从 Access 数据库中读取“是/否”值作为布尔值?

    帮我找回YES NO来自 MS Access 的布尔格式数据类型 我尝试解析它 但它总是返回 false 更新 实际上不是问题抱歉 它确实接受 YES NO 作为布尔值 OleDbconnection dbConnect new OleDb
  • Xcode 7 调试器不会中断内联标头函数

    过去五年我一直在各种 C 项目中使用 Xcode 没有出现这个问题 今天 我打开了一个较旧的项目 大约 2 年前 并尝试通过在该函数中放置一个活动断点来调试头文件中的内联函数 由于某种原因 调试器不会中断此代码 但是 如果我在调用该函数的
  • 当我的进程被终止时到底会发生什么?

    我有一个包含本机代码和托管代码的混合进程 在 Windows Server 2003 上运行 当我从进程资源管理器中终止进程时 它会进入 100 cpu 的状态 并在消失之前保持这种状态一段时间 有时甚至 10 分钟 在此期间我无法 杀死
  • 从对列表创建邻接列表类型结构

    在 C 中 我有 class Pair int val1 int val2 我有一个来自以下来源的配对列表 List
  • 在windows + opengl中选择图形设备

    我知道如何使用 openGL 打开窗口 使用 Win32 或其他工具包 但是当系统有2块显卡时 如何选择要渲染的图形设备 我的编程语言是 C 我专注于 Windows 但任何示例都将受到欢迎 编辑 也许更好地解释我的问题是个好主意 以便添加

随机推荐

  • 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