首页 > 解决方案 > 缓慢的 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 对应物的性能。还要解释为什么它这么慢

标签: c++memcpy

解决方案


先说第一件事。计算机用文字处理事情。典型的字长为 4 或 8 字节长(某些 8 位微控制器除外)。如果你可以一次复制一个单词,事情会快得多。

不过也有并发症。许多处理器不喜欢未对齐的访问,因此每个副本都应该在字边界上。

其他优化可能包括预取数据,但这些开始变得更加复杂。

看看 newlib-nano 的实现以获得灵感。https://github.com/eblot/newlib/blob/master/newlib/libc/string/memcpy.c


推荐阅读