1
int a = 1, b = 1, c = 10;
for(int i = 3; i <= 10; i++){
int temp = a;
a = b;
b += temp;
}
2
movl $<some value>, %rdx # int x = <some value>;
cmpl $64, %rdx # x : 64
jb .L6 # use default
cmpl $69, %rdx # x : 69
ja .L6 # use default
jmp *.L0(64, %rdx, 8) # goto *JTab[x]
.L64: # case 64
leaq (%rdx, %rdx), %rdi # result = x + x;
jmp Done
.L66: # case 66
jmp Done
leaq 10(%rdx), %rdi # result = x + 10;
.L68: # case 68
leaq (, %rdx,2), %rdi # result = x * 2;
jmp .L69
.L69: # case 69
incl %rdi # result = result + 1;
jmp Done
.Lde: # default
movl $3, %rdi # result = 3;
jmp Done
Done:
Jump table
.section .rodata
.align 8
.L4:
.quad .L64 # x = 64
.quad .Lde # x = 65
.quad .L66 # x = 66
.quad .Lde # x = 67
.quad .L68 # x = 68
.quad .L69 # x = 69
3
当x86-64过程需要的储存空间超出寄存器能够存放的大小时,就会在栈上分配空间。这过程成为过程的栈帧。——《深入理解计算机系统》
- 栈帧为什么要链接?
当描述一个方法调用了其他方法时,是通过常量池中指向方法的符号引用表示的。动态链接可以将这些符号引用转换为调用方法的直接引用。 - 栈帧如何链接?
被调用的方法在编译期无法确定,需要在程序运行时将符号引用转换为直接引用,这种链接方式是动态链接。
参考资料:https://www.zhihu.com/question/48267791/answer/2416886945
4
文档中没有所需调用函数
不会做