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

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

回答:

的确用的是间接寻址。

看以下代码:

#include <iostream>

int main(){

int num = 5;

int *ptr = &num;

std::cout << *ptr << std::endl;

return 0;

}

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

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

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

回答:

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

以上是 C语言中指针是不是用汇编的间接寻址实现的? 的全部内容, 来源链接: utcz.com/p/195496.html

回到顶部