类(员工)存储在哪个内存段(代码/数据段)中?

时间:2018-10-02 12:48:41

标签: c++

我试图在堆栈溢出以及Google上找到此问题的答案,但没有得到。 请让我知道是否需要纠正或重复问题。

当我计算雇员对象(emp_obj)和类雇员的大小时,在两种情况下,我都得到4个字节。 但是我不确定班级员工如何将其存储在哪里?

#include <iostream>

using namespace std;

class employee
{
   int employee_id;
  public:
   employee(int id)
   {
     employee_id = id;
   }
};

int main()
{
  employee emp_obj(100);

  cout << "size of class: " << sizeof(employee);  // 4 bytes
  cout << "size of class object (emp_obj): " << sizeof(emp_obj);  // 4 bytes

  return 0;
}

3 个答案:

答案 0 :(得分:4)

您确实意识到了

sizeof(emp_obj)

等于

sizeof(employee)

这两个对象都检查employee对象的大小,该对象为4个字节,因为它仅包含一个整数(无论其自身的值如何)

emp_obj可能会存储在堆栈中,从employee类开始,它是一个类而不是对象,因此不会存储在任何位置。

答案 1 :(得分:3)

  

在哪个内存段(代码/数据段)类(员工)中存储?

一个类没有存储在执行程序的内存中的任何地方。

  

当我计算雇员对象(emp_obj)和类雇员的大小时,在两种情况下,我都得到4个字节。

对于任何类型sizeof(T)

T应返回类型T对象的大小。因此,给定类型为t的对象Tsizeof tsizeof(T)的测量结果完全相同。


但是,某些类的某些功能(尤其是“运行时类型信息”)确实需要存储。 C ++标准未指定此数据的存储位置。

答案 2 :(得分:1)

sizeof(emp_obj)sizeof(employee)相同。 sizeof为您提供了该类型的对象将在内存中占据的大小。

实际的类本身不占用任何内存,只有对象消耗内存(即使这样,在优化之后它们也可能不占用内存)。

关于对象的实际存储位置,C ++不在乎。所有C ++关心的是对象的生存期是如何管理的,即自动存储还是动态存储。这些可以在堆栈中实现,也可以仅在堆栈中实现,也可以仅在堆栈中实现,也可以仅在堆栈中实现,具体取决于实现方式。