知识卡片
间接寻址是指针在机器语言层面的实现
内容
机器指令确定要操作的数据有三种寻址方式,代表数据与指令之间”隔了几层”:立即寻址里操作数字段直接就是数据本身;直接寻址里操作数字段是数据的地址,要先去这个地址取一次数据;间接寻址里操作数字段是”数据的地址”的地址——要先读出这个地址存的内容,把它当作另一个地址,再去那里取真正的数据。栈顶出栈这类操作天然需要间接寻址:程序无法预先知道栈顶数据是什么(立即寻址不行),也无法预先知道栈顶数据存在哪个固定地址(因为栈指针本身会随程序执行不断变化,直接寻址也不行),能确定的只是”栈指针这个位置存着当前栈顶的地址”,因此必须先读栈指针、再用读到的值当地址去取数据。发散:这说明高级语言里的”指针”概念不是编译器凭空发明的语法糖,而是直接对应着 CPU 硬件本身就支持的一种寻址方式——理解间接寻址,就理解了为什么解引用指针在机器层面永远要多付出一次额外的存储器访问延迟,这也是为什么频繁的指针追逐(如遍历链表)比连续内存的顺序访问要慢。
参考来源
《计算机科学概论》第8章《数据抽象》