微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

虚拟工作室空间过度分配

如何解决虚拟工作室空间过度分配

我正在做这门关于 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 举报,一经查实,本站将立刻删除。