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++ – >优化?

当然,我假设也启用了其他优化.

相关文章

对象的传值与返回说起函数,就不免要谈谈函数的参数和返回值...
从实现装饰者模式中思考C++指针和引用的选择最近在看...
关于vtordisp知多少?我相信不少人看到这篇文章,多半是来自...
那些陌生的C++关键字学过程序语言的人相信对关键字并...
命令行下的树形打印最近在处理代码分析问题时,需要将代码的...
虚函数与虚继承寻踪封装、继承、多态是面向对象语言的三大特...