为什么我们为每个变量分配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个字节。
答
您正在查看由默认的调试版本设置生成的代码。特别是/ RTC选项(启用运行时错误检查)。使用0xcccccccc进行填充有助于诊断未初始化的变量,这些差距有助于诊断溢出。
看这段代码没什么意义,你不会发布它。然后再次,发布版本中不会有任何此功能。
跳转到'[ebp-8]'可能有很多原因,例如,该功能可能需要保存被保存的寄存器。显示功能序言。 – chill