为什么我们为每个变量分配12个字节?

时间:2011-11-07 06:26:57

标签: visual-studio debugging memory-management

在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个字节。

1 个答案:

答案 0 :(得分:1)

您正在查看默认的Debug构建设置生成的代码。特别是/ RTC选项(启用运行时错误检查)。填充0xcccccccc有助于诊断未初始化的变量,这些差距有助于诊断溢出。

查看此代码没有多大意义,您不打算发布。然后,在Release版本中将不再有任何功能。