虚拟工作室空间过度分配

问题描述

我正在做这门关于 x86-64 架构的课程,我们为此目的使用虚拟工作室,无论是调试还是其他。所以我们得到了如下代码段:

y = c(0.989,0.975,0.964,0.937,0.877)

现在当我使用调试器时,这是汇编指令

assembly listing of previous code


我得到了,这是堆栈图

stack diagram


对于相同的。现在,如果我们在地址 int func() { long long i = 0xf01dab1ef007ba11; long long j = 0x0b57ac1e5; return i+j; } int main() { return func(); } 处的堆栈图中看到有额外的 8 字节分配。我在 Microsoft 文档中找到了原因,它指出 堆栈将始终保持 16 字节对齐,除了在序言中(例如,在返回后推送地址)......但很少有例外.

00000000'0014FDD0

这又是汇编指令

assembly listing of previous code


这是堆栈图

stack diagram


为了它。现在我明白为什么在地址 int func() { long long i = 0xf01dab1ef007ba11; long long j = 0x0b57ac1e5; long long k = 0x57abbadabad00; return i + j; } int main() { return func(); } 处有额外的 8 个字节的分配,这是为了保持堆栈 16 字节对齐。

但我不明白的是为什么在地址`000000000'014FDC8 上有一个额外的分配?有必要吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)