如何快速将6字节无符号整数复制到内存区域?

2024-04-22

我需要将 6 字节整数值复制到内存区域中,从其开头开始并尽可能快地复制。如果硬件支持这样的操作,我想使用它(我现在使用的是 x64 处理器,编译器是 GCC 4.6.3)。

The memset不适合这项工作,因为它只能复制字节。这std::fill也不好,因为我什至无法定义迭代器,在内存区域的 6 个字节宽度位置之间跳转。

所以,我想要一个功能:

void myMemset(void* ptr, uint64_t value, uint8_t width, size_t num)

这看起来像memset,但还有一个额外的参数width定义多少bytes来自value复制。如果类似的东西可以用 C++ 来表达,那就更好了。

我已经知道显而易见的事情myMemset实施,这将调用memcpy在循环中,最后一个参数(要复制的字节)等于width。我还知道,我可以定义一个大小为的临时内存区域6 * 8 = 48bytes,用6字节整数填充,然后memcpy到目的地区域。

我们可以做得更好吗?


沿着的东西@马克·兰塞姆 https://stackoverflow.com/users/5987/mark-ransom评论:

复制 6 个字节,然后复制 6、12、24、48、96 等。

void memcpy6(void *dest, const void *src, size_t n /* number of 6 byte blocks */) {
  if (n-- == 0) {
    return;
  }
  memcpy(dest, src, 6);
  size_t width = 1;
  while (n >= width) {
    memcpy(&((char *) dest)[width * 6], dest, width * 6);
    n -= width;
    width <<= 1; // double w
  }
  if (n > 0) {
    memcpy(&((char *) dest)[width * 6], dest, n * 6);
  }
}

优化:规模n and width by 6.

[Edit]
更正目的地@SchighSchagh https://stackoverflow.com/users/1072468/schighschagh
添加演员阵容(char *)

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

如何快速将6字节无符号整数复制到内存区域? 的相关文章

随机推荐

  • 如何在 Strapi 中安全地设置数据库密码?

    Strapi 框架 据我了解 要求在启动时提供数据库密码 通常 密码在database js文件 像这样 module exports env gt defaultConnection default connections default
  • 托管对象中的标量类型仅适用于 iPhone 5

    属性 Latitude 是 LatitudeLongitude 类的标量类型 无法为其生成 setter 方法 当我为托管对象生成代码时 我收到一条消息 询问是否需要原始数据类型的标量属性 我应该使用它吗 我想让这个应用程序与 iPhone
  • 使用php获取两个时间/日期之间的差异?

    我想使用 php 找出两个日期之间的时差 以分钟为单位 其格式为 d m Y H i 14 04 2009 12 15 使用 strtotime 将时间解析为时间戳 然后简单地从另一个中减去一个 之后 您可以使用数学函数获取分钟数 天数等
  • 当高阶参数保留时,如何删除模型中的低阶参数?

    问题 只要高阶参数 即交互作用 保留在模型中 我就无法删除模型中的低阶参数 例如主效应参数 即使这样做 模型也会被重构 并且新模型不会嵌套在更高的模型中 请参阅以下示例 因为我来自我使用的方差分析 contr sum d lt data f
  • .NET 有成功的 profibus 通信吗?

    有没有人聊成功了profibus http www profibus com 来自 NET 应用程序 如果您这样做了 您使用什么设备 卡来完成此操作 应用程序是什么 以及您是否使用任何类型的预先存在或可用的代码 我们没有使用过Profibu
  • 如何通过 Python 将 csv 数据帧上传到 azure?

    我正在使用 Python 和 Pyspark 并且想要将 CSV 文件上传到 azure blob 存储 我已经有一个由代码生成的数据框 df 我想做的是接下来的事情 Dataframe generated by code df Creat
  • C++ 特征值/向量分解,只需要快速的前n个向量

    我有一个 3000x3000 协方差相似矩阵 在其上计算特征值 特征向量分解 它是一个 OpenCV 矩阵 我使用cv eigen 完成工作 然而 我实际上只需要前 30 个特征值 向量 我不关心其余的 从理论上讲 这应该可以显着加快计算速
  • 托盘栏中打开多个图标

    我正在开发一个 Windows 应用程序 当我运行该应用程序时 托盘栏上会出现多个图标 当我将鼠标悬停在这些图标上时 它们就会消失 有人知道为什么会发生这种情况吗 protected override void OnClosed Event
  • 在 ASP.NET 身份框架中更改时刷新当前用户的角色?

    使用 VS 2013 标准 MVC 模板和身份提供程序框架 用户已登录 我有 UserManager AddToRole User Identity GetUserId Members Line X RedirectToAction Ind
  • 无法通过 Godaddy 服务器在 ASP.NET 中发送电子邮件

    我有一个托管在 Godaddy 上的 ASP NET 应用程序 我想从中发送电子邮件 当它运行时 我得到 不允许使用邮箱名称 服务器响应是 抱歉 您所在位置的中继被拒绝 代码和Web config的重要部分如下 msg new MailMe
  • 防止 RichTextBox 自动滚动

    我有一个使用 RichTextBox 控件实现的只读数据记录窗口 我希望能够禁用用户单击控件时发生的自动滚动 以便用户可以选择特定日志进行复制 粘贴操作或其他操作 然而 一旦用户单击 RichTextBox 它就会自动滚动到底部 这使得这变
  • 在上下文中绘图时如何翻转坐标?

    我从 UIImage 创建一个上下文 然后使用 CGContextDrawImage bitmapContext CGRectMake 0 0 originalImage size width originalImage size heig
  • 适用于 BlackBerry 的 QR 码阅读器

    是否有 BlackBerry 库 组件 开源或商业 可集成到我自己的应用程序中充当 QR 码阅读器 我想将它完全集成到我的应用程序中 或者 有没有办法使用开源中兴图书馆 http code google com p zxing 与相机结合使
  • UIViewController 的 viewDidAppear 在模式关闭后不会被调用

    UIViewController 视图 A 通过将另一个视图控制器 视图 B 作为模态控件调用来调用它 自我呈现模态视图控制器 视图是动画的 TRUE 视图 B 通过调用而存在 自我解雇ModalViewControllerAnimated
  • 禁用 youtube api 的全屏

    我有一个带有片段的应用程序 在这些片段内我有框架布局 我在其中添加了 YouTubePlayerSupportFragment 但是当我单击全屏时 会引发此异常 java lang RuntimeException 无法启动活动 Compo
  • 使用 Spring 映射嵌套 json 和 POJO

    我正在实现一个 REST API 它使用 json 发送和接收数据 我对这个 API 设计完全陌生 我正在使用 Spring 框架和 requestbody responsebody 进行映射 最初 我有一个这样的 pojo public
  • 通过 ID 从 Firebase 检索 Java 对象

    我正在编写一个 Android 应用程序 我正在尝试检索该类的对象User java按 Firebase 相关表中的 ID 我想知道如何从Java端获取它 只要我尝试了中所述的示例Firebase 官方文档 https www fireba
  • 时间戳转字符串日期

    我不知道如何将时间戳转换为日期 我有 public void onCreate Bundle savedInstanceState super onCreate savedInstanceState setContentView R lay
  • 实体框架、外键和EntityKey

    我的实体框架和外键有问题 我有一个表 BC Message Assets 其中有 3 个 FK MessageId AssetId 和 StatusId 我像这样创建我的 MessageAsset MessageAsset messageA
  • 如何快速将6字节无符号整数复制到内存区域?

    我需要将 6 字节整数值复制到内存区域中 从其开头开始并尽可能快地复制 如果硬件支持这样的操作 我想使用它 我现在使用的是 x64 处理器 编译器是 GCC 4 6 3 The memset不适合这项工作 因为它只能复制字节 这std fi