gpt4 book ai didi

c - 当我知道重叠的一面时,memmove() 的替代方案是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 00:49:48 25 4
gpt4 key购买 nike

我想知道将 n 个字节从 *source 复制到 *destination 时最快的函数是什么*destination = *source + kk 为中性或零

memcpy() 函数具有重叠的未定义行为。

memmove() 函数不是最好的,因为它必须检查重叠边。

还有另一个函数最适合我的情况吗?

提前致谢!

最佳答案

memmove() 没问题。它将通过比较两个指针自行找出移动的方向——一个实现可能类似于:

void * memmove(void *dst, const void *src, size_t len)
{
intptr_t dsti = dst;
intptr_t srci = src;
if (src > dst) {
return _memmove_up(dst, src, len);
} else {
return _memmove_down(dst, src, len);
}
}

在大多数 CPU 上,这将编译成大约六条额外的指令,这些指令仅在函数被调用时执行一次——绕过它没有任何好处。

(理论上,memcpy() 本身没有理由不能进行类似的比较,以消除它与 memmove() 之间的区别。然而,由于一些不幸的历史原因,C 标准库的作者并没有决定进行这种简化,所以我们只能使用这两个函数。)

关于c - 当我知道重叠的一面时,memmove() 的替代方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23122280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com