【问题标题】:C++ class and object - memoryC++ 类和对象 - 内存
【发布时间】:2011-01-29 19:18:02
【问题描述】:

哪个占用内存,classobject?而且,是在compile 还是execution 时间?

谢谢。

【问题讨论】:

  • 这个问题没有(好吧,公平地说:一点)没有意义。
  • 嗯,作业忙吗?
  • 类和对象是您最终可执行文件的一部分。那你怎么看?

标签: c++ class object compile-time execution-time


【解决方案1】:

在编译期间,内存的布局是一个实现细节——你不需要知道或关心。

然而,在运行时...在 C++ 中,类定义类型,但(除非您激活允许有限自省的 RTTI)本身通常不占用任何内存1——它们是只是构建和销毁对象的框架。然而,它们的方法——构造函数、析构函数、实例方法和类方法占用了部分可执行内存,但编译器可以并且确实优化掉程序中未使用的任何此类方法。

类型的实例(即对象以及像int 变量这样的基元)在C++ 中占据了大部分内存,但对于它们的成员函数,它们又引用了它们的类。一个特定类的实例究竟使用了多少内存完全是一个实现细节,您通常不需要关心它。


1 即使这样,类本身也不使用内存,但它们关联的std::typeinfo 实例会使用。但同样,这通常是实现相关的东西,而不是那些即使是干瘪的程序员也很关注的东西。

【讨论】:

  • 静态字段可以认为是占用了属于某个类的一些内存。
  • 类的vtable、静态成员和成员函数在运行时占用内存。
  • @Oli:我从来没有说过。
  • @Jonathan:确实,但您的回答暗示唯一特定于类的数据是类型信息。
  • @Oli:阅读第三段。 “但是对于他们的成员函数,他们引用了他们的类。”
【解决方案2】:

object instance 是在执行时占用内存的那个,因为class 是对象的蓝图。

另外,在C++中有静态变量、局部变量和全局变量,它们也占用内存。

【讨论】:

    【解决方案3】:

    静态、局部和全局变量存储在 BBS 数据段中,而对象存储在堆或堆栈中。 对象是类的实例,而编译器使用类定义通过其类描述创建对象。课堂就像是“如何自己搭建桌子”的指令,只占用写在纸上的内容,而对象是自己按照指令制作的真实桌子,占用真实空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2012-08-15
      • 2021-05-05
      • 1970-01-01
      • 2011-10-16
      • 2014-03-31
      相关资源
      最近更新 更多