g++ move.cpp -std=c++11 -c -g -m32 objdump -d -M intel -S move.o /////////////////////// code #include #include struct foo { int a, b, c, d, e; }; int main() { foo f1 = { 1, 2, 3, 4, 5 }; foo f2 = std::move( f1 ); printf( "f2.c: %d\n", f2.c ); return 0; } /////////////////////// asm 00000000 <_main>: { int a, b, c, d, e; }; int main() { 0: 55 push ebp 1: 89 e5 mov ebp,esp 3: 83 e4 f0 and esp,0xfffffff0 6: 83 ec 40 sub esp,0x40 9: e8 00 00 00 00 call e <_main+0xe> foo f1 = { 1, 2, 3, 4, 5 }; e: c7 44 24 2c 01 00 00 mov DWORD PTR [esp+0x2c],0x1 15: 00 16: c7 44 24 30 02 00 00 mov DWORD PTR [esp+0x30],0x2 1d: 00 1e: c7 44 24 34 03 00 00 mov DWORD PTR [esp+0x34],0x3 25: 00 26: c7 44 24 38 04 00 00 mov DWORD PTR [esp+0x38],0x4 2d: 00 2e: c7 44 24 3c 05 00 00 mov DWORD PTR [esp+0x3c],0x5 35: 00 foo f2 = std::move( f1 ); 36: 8d 44 24 2c lea eax,[esp+0x2c] 3a: 89 04 24 mov DWORD PTR [esp],eax 3d: e8 00 00 00 00 call 42 <_main+0x42> 42: 8b 10 mov edx,DWORD PTR [eax] 44: 89 54 24 18 mov DWORD PTR [esp+0x18],edx 48: 8b 50 04 mov edx,DWORD PTR [eax+0x4] 4b: 89 54 24 1c mov DWORD PTR [esp+0x1c],edx 4f: 8b 50 08 mov edx,DWORD PTR [eax+0x8] 52: 89 54 24 20 mov DWORD PTR [esp+0x20],edx 56: 8b 50 0c mov edx,DWORD PTR [eax+0xc] 59: 89 54 24 24 mov DWORD PTR [esp+0x24],edx 5d: 8b 40 10 mov eax,DWORD PTR [eax+0x10] 60: 89 44 24 28 mov DWORD PTR [esp+0x28],eax printf( "f2.c: %d\n", f2.c ); 64: 8b 44 24 20 mov eax,DWORD PTR [esp+0x20] 68: 89 44 24 04 mov DWORD PTR [esp+0x4],eax 6c: c7 04 24 01 00 00 00 mov DWORD PTR [esp],0x1 73: e8 00 00 00 00 call 78 <_main+0x78> return 0; 78: b8 00 00 00 00 mov eax,0x0 } 7d: c9 leave 7e: c3 ret 7f: 90 nop