如果在创建对象时创建了 VPTR,那么为什么具有虚拟功能的类的大小在 32 位系统上为 4,在 64 位机器上为 8
if vptr is created when object is created then why the size of class having virtual function comes as 4 on 32 bit sys and 8 on 64 bit machine
据说在创建对象时会创建vptr,那么为什么具有虚函数的类的大小在32位机器上为4,在64位机器上为8,这是否意味着基类有一些隐藏的vptr具有一些虚函数(在派生类中也继承(,如果是,那么该vptr有什么用?
指针的大小取决于操作系统。它在 32 位机器上是 32 位(4 字节(,在 64 位机器上是 8 字节。
如果您要求类的大小,而不是指针的大小,则编译器可能会根据操作系统类型将其调整为 32/64 的倍数。
C++标准没有定义vtable
或vptr
必须存在,而是定义了多态性和动态绑定的行为方式。尽管vtable
是与动态绑定结合使用的非常常见的多态性实现,但vptr
不是像指针那样的第一类语言构造,您可以像成员一样访问它,或者被定义为充当有关引用/取消引用或大小的指针。
因此,编译器可以自由使用其他实现,因此您无法使用虚拟成员函数预测对象的大小。
但是,在大多数实现中,vptr
可能寻址与普通指针相同的内存大小,因此vptr
的大小很可能与该体系结构中普通指针的大小相同,即 32 位系统上为 4,64 位系统上为 8
相关文章:
- C++,系统无法执行指定的程序
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在UNIX系统中使用DIR查找文件的字节大小
- 错误处理.将系统错误代码映射到泛型
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 如何在本地机器上运行c++和javascript客户端代码(hackerbank风格)
- 在C++游戏中与库存系统作斗争
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 文件系统:复制功能的速度秘诀是什么
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 在gtest.中使用fff.h模拟系统API
- 64位机器上的C++内存对齐
- 如何制作无限制照明系统
- 使用不同的链接器会产生不同的机器代码吗
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 如何传递多个 std::文件系统选项?
- 遍历顺序由 std::文件系统directory_iterator给出
- 如果在创建对象时创建了 VPTR,那么为什么具有虚拟功能的类的大小在 32 位系统上为 4,在 64 位机器上为 8
- 修复某些机器上c++程序中字体扭曲的大系统字体