memcpy()
通常比 strcpy()
快吗(在大多数真实平台上)? (我假设字符串的大小是已知的。)
如果我没记错的话,i386 汇编器中有 loop
指令复制给定数量的字节或单词。所以这是最快的方法,而 strcpy()
i386 汇编程序实现将在普通循环中使用手动检查 '\0'
。
所以我觉得在 x86 上 memcpy()
比 strcpy()
快。
其他架构呢?
最佳答案
如果您知道要复制的数据的大小,那么 memcpy()
应该与 strcpy()
一样快或更快。否则,memcpy()
不能单独使用,strcpy()
应该和strlen()
后面跟着memcpy()
。
然而...
许多 memcpy()
和/或 strcpy()
和/或 strlen()
的实现旨在有效地处理大数据量。这通常意味着额外的启动开销(例如确定对齐方式、设置 SIMD、缓存管理等)并使这些实现对于复制少量数据(这在编写良好的代码中更有可能)变得不好(慢)。因此,“应该一样快或更快”并不一定意味着“一样快或更快”。例如,对于少量数据,针对大量数据优化的 memcpy()
可能比未针对大量数据优化的 strcpy()
慢得多数据。
另请注意,这里的主要问题是通用代码(例如 memcpy()
和 strcpy()
)无法针对特定情况进行优化。最好的解决方案是具有多种功能 - 例如memcpy_small()
针对复制少量数据进行了优化,memcpy_large()
针对失败的错误代码进行了优化,避免了复制大量数据。
关于c - memcpy() 通常比 strcpy() 快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24966693/