我想用 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/