首先看看C++语言中的内存分类
- 程序映像,在windows程序执行时会导入exe文件到内存,这个便是程序映像,这里面主要有什么呢
- 程序块。主要是存储程序源代码编译后的二进制程序文件,函数什么之类的都在这
- 数据块。主要是存储程序里面的静态数据
- BBS数据区。存储未初始化的静态成员变量
- 动态内存分配
- 堆区。 用来分配程序运行过程中临时申请的存储空间
- 栈区。 程序的运行栈。存放函数的返回地址,寄存器内容,局部变量等
- 程序映像,在windows程序执行时会导入exe文件到内存,这个便是程序映像,这里面主要有什么呢
计算类中占用内存空间的原则:
- 非静态成员变量(静态成员变量不在栈空间)
- 数据对齐处理
- 虚函数表指针
- 空类也占用1字节(表示这个类的唯一存在)
计算时要注意当前编程系统时32位系统还是64位系统
一般来说32位系统的指针占4字节,并且是4字节对齐,64位系统的指针占8字节,并且是8字节对齐。
所以计算时虚函数表指针在32位系统下时4字节,64位系统下是8字节计算要点:
- 成员变量。非静态成员变量是占用对象空间的,而静态成员变量是不占用对象空间,因为静态成员变量是属于全局变量,在常量数据区而不在对象的栈空间。
- 数据对齐。这是针对于成员变量
- 虚函数表指针。主要参考 CollShell的两篇大作见引用资料[1][2]
- 一个对象(未继承其他的基类)只有一个虚函数表
如何计算C++类占用内存大小
最新推荐文章于 2024-04-22 08:24:39 发布
本文介绍了C++中类占用内存的计算方法,包括考虑非静态成员变量、数据对齐、虚函数表指针等因素。不同系统环境下,如32位与64位,指针大小和对齐规则有所不同。同时,详细阐述了虚函数表指针在单继承和多继承情况下的内存布局。参考链接提供了深入理解相关概念的文章。
摘要由CSDN通过智能技术生成