对于你们中的一些人来说,这可能看起来是一个愚蠢/明显的问题,但我仍在学习,所以请温柔一点,哈哈。
我正在编写一个没有 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;
}
我的 friend 告诉我这是一个完整的实现,所以我在这里发布这个是为了询问我如何至少改进它以满足其 CRT 对应项的性能。并且还可以解释为什么它这么慢
最佳答案
首先,第一件事。计算机用文字处理事物。典型的字大小为 4 或 8 字节长(某些 8 位微处理器除外)。如果您一次可以复制一个单词,事情会快得多。
但也有一些并发症。许多处理器不喜欢未对齐的访问,因此每个拷贝都应位于字边界上。
其他优化可能包括预取数据,但这些开始变得更加复杂。
看看 newlib-nano 的实现以获取灵感。 https://github.com/eblot/newlib/blob/master/newlib/libc/string/memcpy.c
关于c++ - memcpy 性能慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66034623/