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

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

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


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


的确用的是间接寻址。

看以下代码:

#include <iostream>

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

g++编译以后,用IDA打开分析:

注意mov eax, [eax]那一行,这不就是间接寻址嘛?

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

【热门文章】
【热门文章】