当前位置: 首页 > article >正文

C++对象的内存模型

  C++对象的内存模型涉及对象的数据成员(包括静态成员和非静态成员)、成员函数以及虚函数表等在内存中的布局和管理方式。以下是C++对象的内存模型的主要组成部分:


1. C++对象的组成

  一个C++对象通常由以下几个部分组成:

  • 非静态数据成员
    对象的核心组成部分,每个对象都有自己的一份独立数据,存储在内存中。
  • 静态数据成员
    属于类本身,而不是任何具体的对象,所有对象共享同一份内存。
  • 成员函数
    不存储在对象的内存中,而是存储在代码段中。所有对象共享同一份成员函数代码。
  • 虚函数表指针(vptr)
    如果类有虚函数,每个对象会包含一个指向虚函数表(vtable)的指针,通常作为对象的一部分存储。

2. 内存布局

  C++对象在内存中的布局大致如下:

a. 普通类对象(无虚函数)

  对于没有虚函数的普通类对象,内存中只包含非静态数据成员,按照它们的声明顺序分配空间(编译器可能会对齐数据以优化性能)。

class A {int x;       // 4字节(假设int是4字节)char y;      // 1字节,但会对齐为4字节
};int main() {A obj;       // 占用8字节:4字节x + 1字节y + 3字节对齐
}
b. 有虚函数的类对象

  如果类中有虚函数,每个对象会额外增加一个虚函数表指针(vptr)。虚函数表存储在类的静态存储区域中,所有对象共享该表。

class B {int x;
http://www.lryc.cn/news/2387012.html

相关文章:

  • SpringBoot3集成Oauth2.1——4集成Swagger/OpenAPI3
  • 基于深度学习的情绪识别检测系统【完整版】
  • 本地依赖库的版本和库依赖的版本不一致如何解决?
  • Redis学习打卡-Day7-高可用(下)
  • Spark on Yarn 高可用模式部署流程
  • AI时代新词-大模型(Large Language Model)
  • 3d tiles高级样式设计与条件渲染
  • Linux中logger命令的使用方法详解
  • 博奥龙Nanoantibody系列IP专用抗体
  • webpack构建速度和打包体积优化方案
  • [IMX] 08.RTC 时钟
  • PG Craft靶机复现 宏macro攻击
  • Qt Creator快捷键合集
  • ElasticSearch--DSL查询语句
  • 海康威视摄像头C#开发指南:从SDK对接到安全增强与高并发优化
  • Redis(四) - 使用Python操作Redis详解
  • Kotlin全栈工程师转型路径
  • 如何利用 Spring Data MongoDB 进行地理位置相关的查询?
  • 服务器并发实现的五种方法
  • PYTORCH_CUDA_ALLOC_CONF基本原理和具体示例
  • 2025年系统架构师---综合知识卷
  • AI 抠图软件批量处理 + 发丝级精度,婚纱 / 玻璃一键抠透明 免安装
  • JVM 深度解析
  • 新能源汽车移动充电服务:如何通过智能调度提升充电桩可用率?
  • SpringCloud Alibaba微服务-- Sentinel的使用(笔记)
  • PARSCALE:大语言模型的第三种扩展范式
  • 在Windows上,将 Ubuntu WSL 安装并迁移到 D 盘完整教程(含 Appx 安装与迁移导入)
  • 企微获取会话内容,RSA 解密函数
  • MyBatis入门:快速搭建数据库操作框架 + 增删改查(CRUD)
  • 离线安装Microsoft 照片【笔记】