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

标签 c++ visual-studio-2010 linker overriding

我想用 AsmLib 中的那个覆盖标准 memcpy图书馆。

文档说:

If you use the "override" version of the asmlib library then you don’t have to modify the program source code. All you have to do is to link the appropriate version of asmlib into your project.

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

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

为什么?

最佳答案

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

例如,要复制的字节数可以在编译时确定,不调用通用的 memcpy 实现是一个巨大的优化。类似地,如果编译器可以确定源和目标对齐,则可以在调用默认 memcpy 之外进行优化。

无论如何,标准的 memcpy 已经针对所有平台进行了高度优化,包括使用 SSE2,所以我不确定您为什么要打扰。

关于c++ - 在 Debug 中覆盖 memcpy 工作但在 Release 中不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8460766/

相关文章:

C++高内存和CPU

c++ - 对抗内存泄漏

qt - ffmpeg 的链接器错误

c - 编译过程中的链接实际上做了什么?

c++ - 根据一组编码标准检查 C/C++ 源代码的免费工具?

c++ - 如何在 MSVC 2005 中手动修饰链接器名称?

visual-studio-2010 - Visual Studio 2010 SP1 中缺少 MVC3

c# - 引用 DLL 未在 Visual Studio 2010 中加载

程序集重定位被截断以适合

c++ - 用户空间线程库