问题描述
我正在做这门关于 x86-64 架构的课程,我们为此目的使用虚拟工作室,无论是调试还是其他。所以我们得到了如下代码段:
y = c(0.989,0.975,0.964,0.937,0.877)
现在当我使用调试器时,这是汇编指令
我得到了,这是堆栈图
对于相同的。现在,如果我们在地址
int func() {
long long i = 0xf01dab1ef007ba11;
long long j = 0x0b57ac1e5;
return i+j;
}
int main() {
return func();
}
处的堆栈图中看到有额外的 8 字节分配。我在 Microsoft 文档中找到了原因,它指出 堆栈将始终保持 16 字节对齐,除了在序言中(例如,在返回后推送地址)......但很少有例外.
00000000'0014FDD0
这又是汇编指令
这是堆栈图
为了它。现在我明白为什么在地址
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 (将#修改为@)