后记:变量是写程序中司空见惯的东西,可是到了机器层面,一切都消失了,只剩下地址,地址,地址。所以CPU和内存非常疑惑,变量到底是什么东西?
熟悉C语言的同学可能对漫画中的汇编有点疑惑,因为C语言代码(x+y)*z没有出现指针,怎么也都变成地址了 ?其实在硬件层面,都是地址,这里展示的是一个C语言函数
int cal(int x, int y,int z){
return (x+y)*z;
}
对于函数调用来说,转化成汇编以后,会对应一个个的栈帧,当前的栈帧(例如函数cal)开始地址保存在ebp这个寄存器当中, 而函数cal的参数保存在上一个栈帧中(也就是调用者的栈帧当中),所以可以用8(%ebp), 12(%ebp),16(%ebp)来引用,意思是把寄存器ebp中的地址加上8,加上12,加上16,所以,一起都是地址。
对于Java虚拟机来说,虽然它运行的是字节码,但是在执行的时候,字节码也得靠机器指令来实现,最底层都是地址。
更多精彩技术漫画,尽在码农翻身