如何计算C++类占用内存大小

本文介绍了C++中类占用内存的计算方法,包括考虑非静态成员变量、数据对齐、虚函数表指针等因素。不同系统环境下,如32位与64位,指针大小和对齐规则有所不同。同时,详细阐述了虚函数表指针在单继承和多继承情况下的内存布局。参考链接提供了深入理解相关概念的文章。
摘要由CSDN通过智能技术生成
  1. 首先看看C++语言中的内存分类

    • 程序映像,在windows程序执行时会导入exe文件到内存,这个便是程序映像,这里面主要有什么呢
      • 程序块。主要是存储程序源代码编译后的二进制程序文件,函数什么之类的都在这
      • 数据块。主要是存储程序里面的静态数据
      • BBS数据区。存储未初始化的静态成员变量
    • 动态内存分配
      • 堆区。 用来分配程序运行过程中临时申请的存储空间
      • 栈区。 程序的运行栈。存放函数的返回地址,寄存器内容,局部变量等
  2. 计算类中占用内存空间的原则:

    • 非静态成员变量(静态成员变量不在栈空间)
    • 数据对齐处理
    • 虚函数表指针
    • 空类也占用1字节(表示这个类的唯一存在)
  3. 计算时要注意当前编程系统时32位系统还是64位系统
    一般来说32位系统的指针占4字节,并且是4字节对齐,64位系统的指针占8字节,并且是8字节对齐。
    所以计算时虚函数表指针在32位系统下时4字节,64位系统下是8字节

  4. 计算要点:

    • 成员变量。非静态成员变量是占用对象空间的,而静态成员变量是不占用对象空间,因为静态成员变量是属于全局变量,在常量数据区而不在对象的栈空间。
    • 数据对齐。这是针对于成员变量
    • 虚函数表指针。主要参考 CollShell的两篇大作见引用资料[1][2]
      • 一个对象(未继承其他的基类)只有一个虚函数表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值