请问虚函数表放在内存中的什么地方?

srxumin 2016-02-20 04:44:21
如果一个对象中有虚函数,系统会为它生成一个“虚表指针”,这个指针占4字节,它指向一个虚表。这个虚表是在内存中的什么位置?或者说是在C++对象模型中的什么位置?就像是静态变量,常量,它们都有自己的一片内存区。
因为虚函数越多,虚表就越大的,但是虚表指针倒是永远是4个字节。
...全文
1068 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2016-02-21
  • 打赏
  • 举报
回复
本质上,C,C++内存分 四大区域, 其中 代码区 一般不存放数据 另有三大数据区 堆区(也就是自由存储区,malloc,free new delete 用的就是这一区域) 栈区(自动变量,函数形式参数,函数返回地址等等 用的就是这一区域) 数据区(有时候称为静态区。 静态常量(优化不掉的),静态变量,外部变量等等在这一区域, 还可以细分,但是没有必要区分这么细, 那种划分,只是编译器实现时,采用的方案,最终汇总为这一区域)
lm_whales 2016-02-21
  • 打赏
  • 举报
回复
1)虚表 虚表在静态区,因为对每个类,所有对象共用虚表。 2)虚表指针 虚表指针在对象内部,对象在哪他在哪。 三大区域都有可能。 就像人移动自己的躯体(用躯体表示对象,用手指表示虚表指针), 躯体在哪里,手指也在哪里
lm_whales 2016-02-21
  • 打赏
  • 举报
回复
编译器有时候把不可修改数据(常量数据),放在代码区 这只是一种代管行为,不是必须的。 主要作用是,现代操作系统代码区是不可写的,或者可以设置为不可写的 这样对常量修改就会出错,编译器这样来维护常量的常量性。 VC debug 版本编译时,通常会这么干
srxumin 2016-02-20
  • 打赏
  • 举报
回复
在C++中,内存分成5个区,分别是堆、栈、自由存储区、全局/静态区和常量存储区 那这个虚函数表是不是放在栈区?
stephen_csdn 2016-02-20
  • 打赏
  • 举报
回复
我想lz想表达的是虚表在栈上
shinerise 2016-02-20
  • 打赏
  • 举报
回复
虚表指针指向的东西无非是一堆函数指针变量啊,和普通的变量没什么区别啊。普通变量在内存中什么位置,虚表指针指向的对象就在什么地方啊。这个问题有点摸不着头脑。

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧