漫画:大家这些奇葩的代码!

后记:变量是写程序中司空见惯的东西,但是到了机器层面,一切都消失了,只剩下地址,地址,地址。因此CPU和内存很是疑惑,变量究竟是什么东西?c#

熟悉C语言的同窗可能对漫画中的汇编有点疑惑,由于C语言代码(x+y)*z没有出现指针,怎么也都变成地址了 ?其实在硬件层面,都是地址,这里展现的是一个C语言函数函数

int cal(int x, int y,int z){ 3d

    return (x+y)*z;指针

}内存

对于函数调用来讲,转化成汇编之后,会对应一个个的栈帧,当前的栈帧(例如函数cal)开始地址保存在ebp这个寄存器当中, 而函数cal的参数保存在上一个栈帧中(也就是调用者的栈帧当中),因此能够用8(%ebp), 12(%ebp),16(%ebp)来引用,意思是把寄存器ebp中的地址加上8,加上12,加上16,因此,一块儿都是地址。get

对于Java虚拟机来讲,虽然它运行的是字节码,可是在执行的时候,字节码也得靠机器指令来实现,最底层都是地址。 
虚拟机

更多精彩技术漫画,尽在码农翻身变量