我知道虚函数和动态多态如何工作。我知道编译器会在基类中添加一个v-ptr,它将由后续的派生类继承。此外,编译器将为每个类创建v表,并将保留关于每个类的大多数派生版本的虚函数的函数指针。
现在,我的问题是这个v表存储在哪里?它在代码段吗?从哪里为这些表分配内存。请分享内部细节。
我也知道实现可能因编译器而异。但是可以在他/她的回答中提到一个特定的编译器和特定于该编译器的实现。
答案 0 :(得分:0)
确实,它取决于编译器和平台。 Linux上的GCC将它们放在ELF文件的.rodata
段中。 Visual C ++将它们放在EXE / DLL文件的.rdata
段中。
在这两种情况下,内存都没有在任何地方分配,它是从执行文件映射的内存,就像代码一样。