为什么没有标准的memswap函数

时间:2020-03-06 14:29:31  来源:igfitidea点击:

为什么C标准没有memswap函数,该函数可能类似于:

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

我知道这很容易编写,但是我认为libc可以做一些很棒的技巧来加快它的速度,就像某些实现为memcpy所做的那样。

解决方案

可能是因为它不是经常需要memset和memcpy,但我不知道我是否曾经使用过memswap(如果有的话)。

我认为是因为它不是很经常需要。但是,在C ++中有一种简单的方法可以做到这一点:

#include <algorithm>

swap_ranges(ptr1, ptr1 + nbytes, ptr2)

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

我们确实需要小心上述内容,因为它假定ptr1和ptr2是char指针。更为规范的方法是:

#include <algorithm>

swap_ranges(ptr1, ptr1 + num_items, ptr2)

在C编程中可能并不需要很多,在C ++中,对类成员来说交换是经常要做的事情,其中​​的std :: swap算法针对不同类型进行了高度优化。

这不是常规需要的。

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

可能的错误情况:-

  • 交换范围重叠时的行为
  • 零长度
  • 内存不足(最佳实现可能会为此分配内存)
  • 空指针

最佳算法也可能取决于工作,因此可以直接由我们更好地编码。

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

你看过药签了吗?

男子拭子