c++ - memcpy 性能慢

标签 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;
}

我的 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/

相关文章:

c++ - 如何将 cv::Mat 转换为浮点指针?

c++ - 简单的 C++ 代码(这里有什么问题?)

c++ - 通过迭代打开文件

c++ - <algorithm> 是否包含 <cmath>?

c++ - 如何将 memcpy 与 unique_ptr 一起使用

c - memcpy 和 "alias"的奇怪行为

使用 void 指针连接两个数组 (C)

c++ - 有效地使用带数组的 KMP 来计算词频计数

C++:程序不输出函数返回值

c - 如何在 C 中将 struct 作为参数传递并对其进行 memcpy ?