看到间接寻址,想到指针,它们仅仅是相似,还是说指针就是用汇编的间接寻址实现的?
应该是间接寻址,编译器在编译时会产生一个符号表,记录了符号名和它的地址。对于指针变量,符号表里记录的是指针的地址,通过该地址取到所指变量的真实地址,最后取到的才是所指变量的值。
的确用的是间接寻址。
看以下代码:
#include <iostream>
int main(){
int num = 5;
int *ptr = #
std::cout << *ptr << std::endl;
return 0;
}
g++编译以后,用IDA打开分析:
注意mov eax, [eax]
那一行,这不就是间接寻址嘛?
当然,如果编译器很确定这个地址的内容,就可能做一些优化,直接把值填入你的变量中(比如对地址用常数传播)。这时候就没有间接寻址了。