【发布时间】:2011-07-19 15:33:57
【问题描述】:
位置无关代码中的虚函数是如何实现的?
我知道,如果我的类有虚函数,编译器通常会为它生成一个包含所有虚函数地址的虚表,并在我的类的每个对象中存储一个指向虚表的指针。
现在,如果我的代码与位置无关,编译器就无法知道虚函数(或任何函数)的地址。那么它有什么作用呢?
我想知道真正的编译器做什么(不是理论上可能的);我最感兴趣的是 linux 32 位平台,但其他平台也有点有趣。
【问题讨论】:
-
链接器知道,只要偏移量不跨越模块边界,它就不会遇到问题。找到一个真正做到这一点的人将是一个更难的问题。
标签: c++ gcc dynamic-linking virtual-functions vtable