设为首页 加入收藏

TOP

C++对象占用内存大小的思考(一)
2014-03-10 12:54:21 来源: 作者: 【 】 浏览:232
Tags:对象 占用 内存 大小 思考

  一直有这样几个疑问,C++中一个对象占有多大内存?会不是里面的函数越多,占有的内存就越大?

  1:空类占有的内存

  #pragma once

  class TestClass

  {

  };

  结果:sizeof(TestClass) = 1

  原因:C++要为每一个类在内存中一个独一无二的地址,所以即便是空类也会被分配1个字节来初

  始化,所以空类的占有的字节是1.

  结论:空类也要占用一个字节的内存

  2:函数占有内对象的内存吗?

  #pragma once

  class TestClass

  {

  public:

  TestClass(void);

  ~TestClass(void);

  void func();

  };

  sizeof(TestClass) = 1

  原因:我们在进行成员函数的调用如Object.func(),其实是这样的过程--func(Object.this)。函数虽然在内

  部声明,但是成员函数的大小不在类的对象里面,而是多个成员对象公用函数,"我们访问类的成员函数是

  通过类里面的一个指针实现,而这个指针指向的是一个table,table里面记录的各个成员函数的地址(当然

  不同的编译可能略有不同的实现)"(引号里面的话为copy网上的,感觉还是有点问题的,如果类里面有这

  样一个指针,岂不是会至少占用四个字节,那么就不会出现空类的大小是1了,应该是直接把Object.func()

  翻译成 TestClass::func(Object.this) )。

  3:仅有数据成员

  #pragma once

  class TestClass

  {

  private:

  int b;

  };

  sizeof(TestClass) = 4

  此时类的大小就是其中数据成员的大小

  4:字节对齐

  #pragma once

  class TestClass

  {

  public:

  TestClass(void);

  ~TestClass(void);

  private:

  char c;

  int b;

  };

  结果:sizeof(TestClass) = 8

  原因:char类型只有1个字节,但是为了提高cpu的计算速度,编译器会将1个字节补成4个字节

   

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++中cout语句背后的堆栈知识 下一篇C++预处理详解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Libevent C++ 高并发 (2025-12-26 00:49:30)
·C++ dll 设计接口时 (2025-12-26 00:49:28)
·透彻理解 C 语言指针 (2025-12-26 00:22:52)
·C语言指针详解 (经典 (2025-12-26 00:22:49)
·C 指针 | 菜鸟教程 (2025-12-26 00:22:46)