缓慢的 memcpy 性能

Slow memcpy Performance

这对你们中的一些人来说似乎是一个 stupid/obvious 问题,但我仍在学习所以请保持温和哈哈。

我正在编写没有 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