【发布时间】:2021-08-30 04:50:25
【问题描述】:
我注意到 __declspec(dllimport) 不适用于 Visual C++ 中的 memcpy。
即链接器introduces a jmp thunk,不管dllimport,这样就可以代替
call QWORD PTR __imp_memcpy
我明白了
call memcpy
这种行为的原因是什么?如何消除memcpy 的跳转开销?
【问题讨论】:
-
#pragma function(memcpy)在优化的发布版本中修复它。但确实会扼杀优化选项,因此请将其隔离在您关心的翻译单元中。 -
@HansPassant:你确定吗? It doesn't work for me。另外,您是否知道在不终止优化的情况下获得
dllimport的任何方法?我一直在尝试所有我能想到的东西(甚至是内联汇编、.def文件、弄乱目标文件符号等)但都失败了——似乎不仅仅是编译器,还有 链接器拒绝将memcpy导入为__imp_memcpy,就像使用任何其他函数一样。
标签: c optimization visual-c++ dllimport