SSE 中的 ZeroMemory

gru*_*htr 2 optimization x86 assembly sse

我需要使用 SSE(首选 SSE2)进行简单的 ZeroMemory 实现有人可以帮忙吗?我正在通过 SO 和网络进行搜索,但没有找到直接答案。

tc.*_*tc. 5

是否ZeroMemory()足够memset()好?

免责声明:以下某些内容可能是 SSE3。

  1. 通过循环填充任何未对齐的前导字节,直到地址为 16 的倍数
  2. push保存 xmm 注册表
  3. pxor将 xmm reg 归零
  4. 而剩余长度>= 16,
    1. movdqa或者movntdq
  5. pop恢复 xmm 注册表。
  6. 填充任何未对齐的尾随字节。

movntdq可能看起来更快,因为它告诉处理器不要将数据带入缓存,但如果稍后要使用数据,这可能会导致性能损失。SecureZeroMemory()如果您在释放内存之前清理内存(就像您可能会做的那样),那么它可能更合适。

  • +1在任何合理的平台上,`memset()`应该已经“尽可能快”(因此“足够好”)。然而你的伪代码很奇怪;为什么要在循环内推送/pxor/pop? (2认同)