在Visual Studio 2010 Professional(x86,Windows 7)中:
... more
00DC1362 B9 39 00 00 00 mov ecx,39h
00DC1367 B8 CC CC CC CC mov eax,0CCCCCCCCh
00DC136C F3 AB rep stos dword ptr es:[edi]
20: int a = 3;
00DC136E C7 45 F8 03 00 00 00 mov dword ptr [ebp-8],3
21: int b = 10;
00DC1375 C7 45 EC 0A 00 00 00 mov dword ptr [ebp-14h],0Ah
22: int c;
23: c = a + b;
00DC137C 8B 45 F8 mov eax,dword ptr [ebp-8]
00DC137F 03 45 EC add eax,dword ptr [ebp-14h]
00DC1382 89 45 E0 mov dword ptr [ebp-20h],eax
24: return 0;
注意相对寻址变量A和B如何不按字大小4对齐? 这里发生了什么?
另外,为什么我们跳过$ ebp-8?
关闭优化将显示理想的寻址方案。
有人可以解释原因吗?感谢。
每个变量的偏移量为12个字节。 A - > B - > C 我犯了一个错误。我的意思是为什么我们跳过前8个字节。
答案 0 :(得分:1)
您正在查看默认的Debug构建设置生成的代码。特别是/ RTC选项(启用运行时错误检查)。填充0xcccccccc有助于诊断未初始化的变量,这些差距有助于诊断溢出。
查看此代码没有多大意义,您不打算发布。然后,在Release版本中将不再有任何功能。