c++ - 缓慢的 memcpy 性能
问题描述
对你们中的一些人来说,这似乎是一个愚蠢/显而易见的问题,但我仍在学习,所以请保持温柔哈哈。
我正在编写一个没有 CRT 的应用程序,所以我必须实现自己的 memcpy 函数。在完成所有工作并使其正常工作后,我注意到该应用程序的执行速度明显慢于 CRT 对应应用程序。过了一会儿,我追踪到了我的自定义 memcpy 函数。
void* _memcpy(void* destination, void* source, size_t num)
{
char* d = (char*)destination;
char* s = (char*)source;
while (num--)
*d++ = *s++;
return destination;
}
我的朋友告诉我这是一个完整的 sh*t 实现,所以我在这里发布这个是为了问我如何至少改进它以满足它的 CRT 对应物的性能。还要解释为什么它这么慢
解决方案
先说第一件事。计算机用文字处理事情。典型的字长为 4 或 8 字节长(某些 8 位微控制器除外)。如果你可以一次复制一个单词,事情会快得多。
不过也有并发症。许多处理器不喜欢未对齐的访问,因此每个副本都应该在字边界上。
其他优化可能包括预取数据,但这些开始变得更加复杂。
看看 newlib-nano 的实现以获得灵感。https://github.com/eblot/newlib/blob/master/newlib/libc/string/memcpy.c