前端之家收集整理的这篇文章主要介绍了
c – 使用movsd制作编译器复制字符,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在时间关键
函数中复制相对较短的内存序列(小于1 KB,通常为2-200个字节).
cpu端的最佳
代码似乎是rep movsd.但是我不知道怎么能让我的编译器
生成这段
代码.我希望(我依旧记得这么看)使用memcpy会使用编译器内置的内在
函数来做到这一点,但基于反汇编和调试,似乎编译器正在使用
调用memcpy / memmove库实现.我也希望编译器可能足够智能以识别跟随循环并自己使用rep movsd,但似乎它没有.
char *dst;
const char *src;
// ...
for (int r=size; --r>=0; ) *dst++ = *src++;
有没有办法让Visual Studio编译器生成rep movsd序列而不是使用内联汇编?
想到几个问题.
首先,你怎么知道movsd会更快?你有没有查看它的延迟/吞吐量? x86架构充满了不应该使用的旧指令,因为它们在现代cpu上效率不高.
其次,如果你使用std :: copy而不是memcpy会发生什么? std :: copy可能更快,因为它可以在特定数据类型的编译时专用.
第三,你是否在项目属性下启用了内部函数 – > C/C++ – >优化?
当然,我假设也启用了其他优化.
原文链接:https://www.f2er.com/c/119349.html