2011-11-07 105 views
1

在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

回答

1

您正在查看由默認的調試版本設置生成的代碼。特別是/ RTC選項(啓用運行時錯誤檢查)。使用0xcccccccc進行填充有助於診斷未初始化的變量,這些差距有助於診斷溢出。

看這段代碼沒什麼意義,你不會發布它。然後再次,發佈版本中不會有任何此功能。

相關問題