虚拟功能如何在与位置无关的代码中实现?
我知道如果我的类有虚函数,编译器通常会为它生成一个包含所有虚函数地址的vtable,并在我的类的每个对象中存储一个指向vtable的指针。
现在,如果我的代码与位置无关,则编译器无法知道虚函数的地址(或任何函数)。那它做了什么?
我想知道真正的编译器是做什么的(理论上不可能);我最感兴趣的是Linux 32位平台,但其他平台也有点有趣。
答案 0 :(得分:7)
有两种选择:
答案 1 :(得分:-1)
我建议您编写一些示例程序并自行检查它们,例如IDA Pro。下载freeware version或demo version。
答案 2 :(得分:-1)
基本上,vtable无处不在,实现为函数指针表。