我试图找出c++类的虚函数表的确切存储位置。我找到了一些答案,比如它是一个“函数指针的静态数组”,那么它会存储在数据段只读内存中吗?(初始化后的一个)
发布于 2012-05-01 01:15:45
很可能是这样的。然而,它不是强制的。甚至没有强制要求通过虚函数表实现多态性,但在大多数平台上是这样的。这些都是实现细节,只要编译器遵守标准设置的行为,它就可以做任何它想做的事情。
vftable
是每个类一个,并且只存储在内存中的一个位置。
发布于 2012-05-01 01:16:04
当你把任何函数设为虚函数时,编译器会在你的类中插入一个vptr。因此,类的大小将增加4个字节(在Win32上).This指针保存虚拟表(vtable)的地址。vtable是由编译器在编译时构造的,它基本上只是一个函数指针数组。函数指针实际上是指向该特定类的虚函数的指针。更准确地说,虚表是函数指针的静态数组,因此同一类的不同实例可以共享该vtable。因为静态成员存储在数据段(.data)中,所以vtable也存储在可执行文件的数据段中。
发布于 2014-05-16 07:01:45
它依赖于实现,是的。
对于g++ (4.9.0),虚表(而不是指针)存储在ELF文件的.rodata部分,其对应的段加载到内存中。
https://stackoverflow.com/questions/10387691
复制相似问题