查看原文
其他

漫画:你们这些奇葩的代码!

码农翻身刘欣 码农翻身 2021-04-27

后记:变量是写程序中司空见惯的东西,可是到了机器层面,一切都消失了,只剩下地址,地址,地址。所以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虚拟机来说,虽然它运行的是字节码,但是在执行的时候,字节码也得靠机器指令来实现,最底层都是地址。 

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


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存