XZ Blog XZ Blog
首页
  • 人体姿态估计
  • 2D-3D-Lifting
  • 动作质量评估
  • 基于RGBD视觉信息的异常行为识别
  • 基于RGB视频的行为识别
  • 大模型应用
  • 网络结构

    • Transformer
    • GCN
    • Graph Transformers
    • Diffusion Model
  • 深度学习
  • 论文解读
  • 后端开发
  • Git
  • 博客搭建
  • Debug
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

xzhouzeng

@渐行。
首页
  • 人体姿态估计
  • 2D-3D-Lifting
  • 动作质量评估
  • 基于RGBD视觉信息的异常行为识别
  • 基于RGB视频的行为识别
  • 大模型应用
  • 网络结构

    • Transformer
    • GCN
    • Graph Transformers
    • Diffusion Model
  • 深度学习
  • 论文解读
  • 后端开发
  • Git
  • 博客搭建
  • Debug
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 后端开发

    • cmake介绍
    • \{}统一初始化方
    • C++11新特性
    • C++标准推荐使用标准库头文件
    • C++动态内存分配和静态的区别
    • C++类函数后面加const的作用
    • C++类和结构区别
    • C++内存区域
    • nullptr与NULL
    • priority_queue使用
    • string , cstring , string h 的区别
    • using与typedef定义别名区别
    • vector中[]和at访问区别
    • 常量指针和指针常量
    • 空类大小及相关介绍
      • 容器emplace与push操作
      • 数据结构操作——时间复杂度
      • 智能指针(Smart Pointers)
      • 最大堆的实现
    • Git

    • 博客搭建

    • Debug

    • python开发

    • 技术
    • 后端开发
    xzhouzeng
    2023-03-20
    目录

    空类大小及相关介绍

    # 空类大小及相关介绍

    Created: March 19, 2024 3:21 PM

    在C++中,空类的实例大小不是0,而是1字节。这是为了确保每个不同的对象实例都有一个独特的地址。如果空类的实例大小为0,那么两个不同的对象可能会被分配相同的地址,这会违反C++标准中关于对象唯一性的规定。

    # 为什么空类的大小是1字节?

    在C++中,每个对象需要有一个独特的地址,即使对象是空的。这个规则允许对象被成功地用作基类或被用于其他需要区分不同对象地址的场合。如果允许对象的大小为0,那么在创建多个这种对象时,它们可能会占据相同的内存地址,这在C++的语义中是不允许的。因此,标准规定了即使是空类的实例也至少占用1字节的空间,以保证每个实例都有一个唯一的内存地址。

    # 示例代码

    class EmptyClass {};
    
    int main() {
        std::cout << "Size of an empty class: " << sizeof(EmptyClass) << std::endl;
    }
    
    1
    2
    3
    4
    5

    输出将会是:

    Size of an empty class: 1
    
    1

    这个例子展示了即使**EmptyClass**没有任何成员变量和成员函数,它的实例大小仍然是1字节。

    # 类似问题

    • 带有静态成员的类:静态成员变量不计算在类实例的大小中,因为它们存储在全局数据区,而不是每个类实例中。
    • 带有虚函数的类:如果一个类有虚函数,它的实例大小会增加,因为需要存储指向虚函数表(vtable)的指针。虚函数表是一个包含指向类虚函数的指针的数组。这个指针的大小通常是4字节(在32位系统上)或8字节(在64位系统上),但这依赖于编译器和目标平台。
    • 继承:如果一个类是从其他类继承而来的,它的大小至少等于基类的大小,加上派生类自己的成员变量所需的空间。如果使用虚拟继承,可能还会有额外的开销。

    了解这些规则有助于更好地理解C++对象模型以及如何在设计类时考虑内存布局。

    编辑 (opens new window)
    常量指针和指针常量
    容器emplace与push操作

    ← 常量指针和指针常量 容器emplace与push操作→

    最近更新
    01
    VideoLLMs
    03-20
    02
    Video2Script
    12-07
    03
    多模态
    11-09
    更多文章>
    Theme by Vdoing | Copyright © 2022-2024 xzhouzeng | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式