gpt4 book ai didi

visual-studio - 为什么要为每个变量分配 12 个字节?

转载 作者:行者123 更新时间:2023-12-05 04:18:53 26 4
gpt4 key购买 nike

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

最佳答案

您正在查看由默认调试build设置生成的代码。特别是 /RTC option (启用运行时错误检查)。用 0xcccccccc 填充堆栈帧有助于诊断未初始化的变量,变量周围的间隙有助于诊断缓冲区溢出。

查看此代码没有多大意义,您不会发布它。它纯粹是一个调试构建工件,只是用来帮助您从代码中找出错误。没有一个保留在发布版本中。

关于visual-studio - 为什么要为每个变量分配 12 个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8033353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com