首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++类的虚函数表存放在哪里?

C++类的虚函数表存放在哪里?
EN

Stack Overflow用户
提问于 2012-05-01 01:11:37
回答 3查看 3.1K关注 0票数 4

我试图找出c++类的虚函数表的确切存储位置。我找到了一些答案,比如它是一个“函数指针的静态数组”,那么它会存储在数据段只读内存中吗?(初始化后的一个)

EN

回答 3

Stack Overflow用户

发布于 2012-05-01 01:15:45

很可能是这样的。然而,它不是强制的。甚至没有强制要求通过虚函数表实现多态性,但在大多数平台上是这样的。这些都是实现细节,只要编译器遵守标准设置的行为,它就可以做任何它想做的事情。

vftable是每个类一个,并且只存储在内存中的一个位置。

票数 2
EN

Stack Overflow用户

发布于 2012-05-01 01:16:04

当你把任何函数设为虚函数时,编译器会在你的类中插入一个vptr。因此,类的大小将增加4个字节(在Win32上).This指针保存虚拟表(vtable)的地址。vtable是由编译器在编译时构造的,它基本上只是一个函数指针数组。函数指针实际上是指向该特定类的虚函数的指针。更准确地说,虚表是函数指针的静态数组,因此同一类的不同实例可以共享该vtable。因为静态成员存储在数据段(.data)中,所以vtable也存储在可执行文件的数据段中。

票数 1
EN

Stack Overflow用户

发布于 2014-05-16 07:01:45

它依赖于实现,是的。

对于g++ (4.9.0),虚表(而不是指针)存储在ELF文件的.rodata部分,其对应的段加载到内存中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10387691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档