为什么没有标准的memswap功能

时间:2008-09-20 20:21:47

标签: c

为什么没有c标准的memswap函数,可能看起来像:

int memswap(void *ptr1, void *ptr2, size_t nbytes)?

我知道写起来很容易,但我认为libc可以做一些很棒的技巧来加速它,就像有些实现为memcpy做的那样。

5 个答案:

答案 0 :(得分:11)

我认为因为不经常需要它。但是,在C ++中有一种简单的方法:

#include <algorithm>

swap_ranges(ptr1, ptr1 + nbytes, ptr2)

它可能不像内置的编译器那样优化,但它有可能比你自己编写的循环更快,因为它可能具有你不会实现的特定于平台的优化。

你需要注意上面的内容,因为它假设ptr1和ptr2是char指针。更常规的做法是:

#include <algorithm>

swap_ranges(ptr1, ptr1 + num_items, ptr2)

答案 1 :(得分:9)

这不是常规所需要的。

可能已经考虑并放弃了这些想法,因为很难想出一种通用的算法。不要忘记C是一种古老的语言,扩展需要普遍有用。

可能的错误情况: -

  • 交换范围重叠时的行为
  • 长度为零
  • 内存耗尽(最佳实现可能会分配内存来执行此操作)
  • 空指针

最佳算法可能还取决于您正在做什么,因此可以直接由您更好地编码。

  • 使用临时结构和分配交换结构可能更快
  • 小长度 - 可能更好地分配临时内存
  • 长度 - 部分交换的“部分”(其中部分是最佳长度)
  • 使用硬件复制功能

答案 2 :(得分:3)

可能因为它不经常需要 - 我经常记得和记忆,但我不知道如果可以的话,我曾经使用过memswap。

答案 3 :(得分:3)

在C编程中可能不经常需要它,在C ++中,在类成员中,交换是常规事情,std::swap算法针对不同类型进行了高度优化。

答案 4 :(得分:-2)

你看过棉签吗?

男人用棉签