首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么没有一个标准的memswap函数

为什么没有一个标准的memswap函数
EN

Stack Overflow用户
提问于 2008-09-20 20:21:47
回答 4查看 8.4K关注 0票数 21

为什么没有c标准的内存交换函数,它可能看起来像这样:

代码语言:javascript
运行
复制
int memswap(void *ptr1, void *ptr2, size_t nbytes)?

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-09-21 15:21:51

这不是例行公事需要的。

这些想法可能已经被考虑和丢弃了,因为很难提出一个通用的算法。别忘了,C语言是一门古老的语言,扩展必须是通用的。

可能的错误条件:-

当要交换的范围重叠时的空指针行为

  • length of zero

  • running of memory (最佳实现可能会为此分配内存)

  • null指针

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

使用temp结构和assignment

  • small length可能更快地使用
  • 交换结构-可能更好地分配临时内存
  • long length-‘
  • section swap (其中section是一些最佳长度)
  • use of hardware copy
票数 6
EN

Stack Overflow用户

发布于 2008-09-20 20:38:58

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

代码语言:javascript
运行
复制
#include <algorithm>

swap_ranges(ptr1, ptr1 + nbytes, ptr2)

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

您需要小心使用上面的代码,因为它假设ptr1和ptr2是字符指针。更规范的方法是:

代码语言:javascript
运行
复制
#include <algorithm>

swap_ranges(ptr1, ptr1 + num_items, ptr2)
票数 14
EN

Stack Overflow用户

发布于 2008-09-20 20:24:03

可能是因为我不经常需要memset和memcpy,但我不知道我会不会用过memcpy。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/109249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档