Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 慢内存性能_C++_Memcpy - Fatal编程技术网

C++ 慢内存性能

C++ 慢内存性能,c++,memcpy,C++,Memcpy,对你们中的一些人来说,这似乎是一个愚蠢/明显的问题,但我仍在学习,所以请温柔点哈哈 我正在编写一个没有CRT的应用程序,所以我必须实现自己的memcpy函数。在完成所有工作并使其正常工作后,我注意到该应用程序的运行速度明显低于其对应的CRT。过了一会儿,我找到了我的自定义memcpy函数 void* _memcpy(void* destination, void* source, size_t num) { char* d = (char*)destination; char*

对你们中的一些人来说,这似乎是一个愚蠢/明显的问题,但我仍在学习,所以请温柔点哈哈

我正在编写一个没有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的实现,寻找灵感

@MemeMachine——库版本的维护人员花了大量时间确保memcpy得到优化,可能是用汇编语言编写和/或使用内部函数。你几乎不可能超越或达到已经提供的水平。memcpy之所以被“超级优化”,是因为这个函数实际上是使软件“快速”的支柱,因此从中挤出所有性能是非常重要的。这里所有不理解编译器知道这是memcpy的东西都是错误的@M.M有唯一值得一看的答案。为未优化的构建进行优化是浪费时间的,除非您积极地需要提高调试性能(这里可能不是这种情况)@MemeMachine——仅仅因为您说不想使用CRT并不意味着您不能查看CRT如何实现该功能。然后,你可以用它作为创建你自己的代码的指南,而不是试图从头开始,希望你编写的代码足够快。如果你那样做了,你的朋友就不会有什么可抱怨的了。@JosephLarson memcpy会处理这个问题吗?我不认为最佳解决方案也会依赖于CPU体系结构。见本文: