C语言中指针是不是用汇编的间接寻址实现的?

看到间接寻址,想到指针,它们仅仅是相似,还是说指针就是用汇编的间接寻址实现的?

阅读 8.3k
2 个回答

的确用的是间接寻址。

看以下代码:

#include <iostream>

int main(){
    int num = 5;
    int *ptr = &num;
    std::cout << *ptr << std::endl;
    return 0;
}

g++编译以后,用IDA打开分析:
汇编代码
注意mov eax, [eax]那一行,这不就是间接寻址嘛?

当然,如果编译器很确定这个地址的内容,就可能做一些优化,直接把值填入你的变量中(比如对地址用常数传播)。这时候就没有间接寻址了。

新手上路,请多包涵

应该是间接寻址,编译器在编译时会产生一个符号表,记录了符号名和它的地址。对于指针变量,符号表里记录的是指针的地址,通过该地址取到所指变量的真实地址,最后取到的才是所指变量的值。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进