覆盖memcpy在Debug中工作但不在Release中工作?

时间:2011-12-10 23:31:56

标签: c++ visual-studio-2010 linker override

我想用AsmLib库中的那个覆盖标准memcpy。

文档说:

  

如果使用asmlib库的“覆盖”版本,则不必修改   程序源代码。您所要做的就是将相应版本的asmlib链接到您的   项目

我所做的是,在调试和发布配置中,我已将“alibcof64o.lib”添加到其他依赖项中。

当我在Debug中编译时,它运行正常,当我查看它将使用SSE指令调用A_memcpy的反汇编时。但是,当我使用Release进行编译时,它不会调用A_memcpy,而是调用常规的。

为什么?

1 个答案:

答案 0 :(得分:3)

发布模式包括优化。许多优化会影响memcpy被调用的方式。

例如,可以在编译时确定要复制的字节数,这不是调用泛型memcpy实现的大规模优化。同样,如果编译器可以确定源和目标是对齐的,那么除了调用默认的memcpy之外,还可以进行优化。

无论如何,标准memcpy已经针对所有平台进行了大量优化,包括使用SSE2,所以我不确定为什么你会烦恼。