我试图在堆栈溢出以及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;
}
答案 0 :(得分:4)
您确实意识到了
sizeof(emp_obj)
等于
sizeof(employee)
这两个对象都检查employee
对象的大小,该对象为4个字节,因为它仅包含一个整数(无论其自身的值如何)
emp_obj
可能会存储在堆栈中,从employee
类开始,它是一个类而不是对象,因此不会存储在任何位置。
答案 1 :(得分:3)
在哪个内存段(代码/数据段)类(员工)中存储?
一个类没有存储在执行程序的内存中的任何地方。 †
对于任何类型当我计算雇员对象(emp_obj)和类雇员的大小时,在两种情况下,我都得到4个字节。
sizeof(T)
的 T
应返回类型T
的对象的大小。因此,给定类型为t
的对象T
,sizeof t
和sizeof(T)
的测量结果完全相同。
†但是,某些类的某些功能(尤其是“运行时类型信息”)确实需要存储。 C ++标准未指定此数据的存储位置。
答案 2 :(得分:1)
sizeof(emp_obj)
与sizeof(employee)
相同。 sizeof
为您提供了该类型的对象将在内存中占据的大小。
实际的类本身不占用任何内存,只有对象消耗内存(即使这样,在优化之后它们也可能不占用内存)。
关于对象的实际存储位置,C ++不在乎。所有C ++关心的是对象的生存期是如何管理的,即自动存储还是动态存储。这些可以在堆栈中实现,也可以仅在堆栈中实现,也可以仅在堆栈中实现,也可以仅在堆栈中实现,具体取决于实现方式。