从一份流调报告读出中国打工人的勤劳与坚韧

太原市警方,请回应一下网友对媒体人胡新成的关心

2021年推特网黄Top10排行榜

卫生部,现在是承认失败的时候了

约炮双胞胎!王力宏男女炮友名单,首次曝光!竟有大家熟悉的“他”

分享到微信朋友圈

点击图标下载本文截图到手机
即可分享到朋友圈。如何使用?

自由微信即将改版!花5分钟留下你宝贵的意见
查看原文

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

码农翻身刘欣 码农翻身

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

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


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