c++ - MSVC : Invalid memcpy optimization?

标签 c++ visual-c++ x86 memcpy compiler-bug

考虑以下代码:

void MemMove8(void* dst, void* src)
{
    char tmp[8];
    memcpy(tmp, src, 8);
    memcpy(dst, tmp, 8);
}
MSVC (16.7.1) x86 with/O2 为此函数生成以下程序集:
; _dst$ = ecx
; _src$ = edx
    mov eax, DWORD PTR [edx]
    mov DWORD PTR [ecx], eax
    mov eax, DWORD PTR [edx+4]
    mov DWORD PTR [ecx+4], eax
但如果输入和输出缓冲区重叠,这将不起作用(在某些情况下)。
生成的代码对我来说似乎是错误的;或者这是一个有效的转换,我在这里遗漏了什么?

最佳答案

关于c++ - MSVC : Invalid memcpy optimization?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63435484/

相关文章:

c++ - 使用 int*& 通过引用传递指针会导致奇怪的问题

c++ - 什么是 do(keyword) c++?

c++ - SQL Server native 客户端 API 示例

c++ - 获取消息到 DebugView

windows - 如何在 Windows 的 x86 程序集中编写系统调用?

c++ - 动态字符串数组,编译错误

c++ - CString 到 Float 转换

c++ - MFC中如何对CListCtrl中的Item进行排序?

reference - 一些x86 ASM引用/教程?

c - 如何在 32 位和 64 位模式下获得相同的 double 运算行为?