gpt4 book ai didi

c - 来自 C 的优化 MIPS 指令立即返回?

转载 作者:太空宇宙 更新时间:2023-11-04 01:43:59 25 4
gpt4 key购买 nike

我一直在研究 Godbolt 以了解编译器如何优化指令,我注意到简单 C 程序的优化似乎立即返回而无需实际进行计算。假设我在 Godbolt ( here ) 中有一个非常简单的程序:

int square(int num) {
return num * num;
}

int main(int argc, const char* argv[]){
return square(argc);
}

MIPS 指令输出为:

square:
j $31
mul $2,$4,$4

main:
j $31
mul $2,$4,$4

根据我对 MIPS 的记忆,这不就是立即跳转到 $ra 寄存器,实际上什么都不做吗?我认为一旦我们 j $31 或跳转到返回地址(而不是执行 jal),我们就在那个点有效地从函数返回。那么,如果它在乘法之前返回,它是如何工作的呢?

最佳答案

我完全不是一个汇编人员,但我不久前确实读到过这个。答案是:分支延迟槽。在这里阅读更多:https://devblogs.microsoft.com/oldnewthing/20180411-00/?p=98485

When you perform a branch instruction, the instruction after the branch instruction is executed, even if the branch is taken. The branch itself is delayed by one instruction.

关于c - 来自 C 的优化 MIPS 指令立即返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57437383/

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