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