优秀的编程知识分享平台

网站首页 > 技术文章 正文

c++ 空类占用内存吗?

nanyue 2025-01-08 16:17:50 技术文章 3 ℃

案例:

#include <cstdio>
class Empty {};

class EmptyVirtual {
  virtual void foo() {}
};

class OneInt {
  int a;
};

class TwoInt {
  void foo() {}
  int a;
  int b;
};

int main(int argc, const char **argv) {
  Empty emp;
  EmptyVirtual emp_virtual;
  OneInt one;
  TwoInt two;
  printf("emp size: %ld addr:%p", sizeof(emp), &emp);
  printf("\nemp_vir size: %ld addr:%p", sizeof(emp_virtual), &emp_virtual);
  printf("\none size: %ld addr:%p", sizeof(one), &one);
  printf("\ntwo size: %ld addr:%p\n", sizeof(two), &two);
  return 0;
}
emp size: 1 addr:0x7fff0dc1ddc3
emp_vir size: 8 addr:0x7fff0dc1ddc8
one size: 4 addr:0x7fff0dc1ddc4
two size: 8 addr:0x7fff0dc1ddd0

总结:

--1 空类实例化后也需要分配内存,因为也可以取地址,所以编译器就给了一个最小的内存大小 1 个字节

--2 空类有虚函数,实例化后需要存储虚指针,因此大小是8字节(64位)

--3 非空类的内存大小就和成员变量有空,成员函数无关

Tags:

最近发表
标签列表