【发布时间】:2019-12-17 15:04:21
【问题描述】:
我一直在使用 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),我们就会有效地从该函数返回。那么,如果它在进行乘法之前返回,它是如何工作的呢?
【问题讨论】:
-
有些处理器总是在分支指令之后执行指令。 MIPS 可能就是其中之一。