我想在时间关键函数中复制一个相对较短的内存序列(小于 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
序列吗?