gpt4 book ai didi

c - C 中的 memmove 实现

转载 作者:太空狗 更新时间:2023-10-29 17:14:13 25 4
gpt4 key购买 nike

谁能帮我理解 memmove 在 C 中是如何实现的。我只有一个特殊条件吗?

if((src<dst)&&((src+sz) > dst))

copy from the back

它还取决于堆栈增长的方式吗?

最佳答案

从数学上讲,您根本不必担心它们是否重叠。如果src小于dst,则从末尾开始复制。如果src大于dst,则从头开始复制。

如果srcdst相等,直接退出。

那是因为您的案例属于以下情况之一:

1) <-----s----->                start at end of s
<-----d----->

2) <-----s-----> start at end of s
<-----d----->

3) <-----s-----> no action
<-----d----->

4) <-----s-----> start at beginning of s
<-----d----->

5) <-----s-----> start at beginning of s
<-----d----->

即使没有重叠,它仍然可以正常工作,并简化您的条件。

如果向前复制比向后复制更有效,那么是的,您应该检查重叠以确保尽可能使用更有效的方法。换句话说,将上面的选项 1 更改为从头开始复制。

关于c - C 中的 memmove 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3572309/

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