You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否存在“环形memcpy”?如何无循环实现环形数组带偏移复制

环形数组带偏移复制的高效实现方案

你要做的环形数组带偏移复制,不用写循环,靠两次memcpy就能搞定——memcpy是编译器优化过的底层函数,比手动遍历效率高得多。

先理清楚你的逻辑:把array1[index]放到array2[(offset+index)%SIZE],本质就是把array1拆成两段,分别复制到array2的后半段和前半段(偏移量不为0时)。

替代代码

#include <string.h>

uint8_t array1[SIZE];
uint8_t array2[SIZE];
uint8_t offset = SOME_OFFSET;

size_t len1 = SIZE - offset;
// 复制array1前半段到array2的偏移起始位置
memcpy(array2 + offset, array1, len1);
// 复制array1剩余部分到array2开头
memcpy(array2, array1 + len1, offset);

细节说明

  • 如果offset是0,len1等于SIZE,第二次memcpy长度为0,自动退化成普通整段复制,兼容边界情况。
  • 非0偏移时,array1被分成[0, len1)和[len1, SIZE)两部分,对应array2的[offset, SIZE)和[0, offset)区间,完全匹配环形偏移的需求。

这种方案没有手动循环,全靠标准库的优化实现,数组越大,性能优势越明显。

内容的提问来源于stack exchange,提问作者Jim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 13:20:35