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

问题描述:

在Visual Studio 2010专业版(86,视窗7):为什么我们为每个变量分配12个字节?

... 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

跳转到'[ebp-8]'可能有很多原因,例如,该功能可能需要保存被保存的寄存器。显示功能序言。 – chill

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

看这段代码没什么意义,你不会发布它。然后再次,发布版本中不会有任何此功能。