por*_*ton 17 c performance x86 memcpy strcpy
是memcpy()通常速度比strcpy()(上最真实的平台)?(我假设字符串的大小是已知的.)
如果我正确地记得i386汇编程序,则会有loop指令复制给定数量的字节或单词.所以它是最快的方式,而strcpy()i386汇编程序实现将'\0'在一个简单的循环中使用手动检查.
所以我觉得在x86上memcpy()要快于strcpy().
其他架构是什么?
Bre*_*dan 23
如果您知道要复制的数据的大小,那么memcpy()应该比快速或更快strcpy().否则,memcpy()不能单独使用,strcpy()应该比strlen()后面快或快memcpy().
然而...
许多实现memcpy()和/或strcpy()和/或strlen()旨在有效地处理大量数据.这通常意味着额外的启动开销(例如,确定对齐,设置SIMD,缓存管理等),并使这些实现不好(缓慢)复制少量数据(这在编写良好的代码中更有可能).因此," 应该快或快 "并不一定意味着" 快或快 ".例如,对于少量数据,针对大量数据memcpy()优化的数据可能明显慢strcpy()于未针对大量数据优化的数据.
还要注意,这里的主要问题是通用代码(例如memcpy()和strcpy())不能针对特定情况进行优化.最好的解决方案是拥有多个功能 - 例如memcpy_small(),它针对复制少量数据memcpy_large()进行了优化,并针对无法避免复制大量数据的错误代码进行了优化.
sup*_*cat 10
几乎在任何平台上,memcpy()都会比strcpy()复制相同数量的字节时更快.当字符串的最大允许大小远大于其实际大小时,唯一的时间strcpy()或其任何"安全"等价物将胜出memcpy().如果一个缓冲区可以容纳多达一百万个字符的字符串,并且想要将字符串复制到另一个百万字节的缓冲区,memcpy()则即使第一个缓冲区中的字符串只有两个字符,也必须复制一百万个字节长.strcpy()但是,该函数或其等价物能够提前退出,并且复制两个字符可能比memcpy()复制一百万个字符所需的时间更少.
| 归档时间: |
|
| 查看次数: |
13802 次 |
| 最近记录: |