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

C++ 存储在哪个内存段(代码/数据段)类(员工)中?,c++,C++,我试图在stack overflow和google上找到这个问题的答案,但没有找到答案。 请让我知道,如果有任何问题或重复的问题需要更正 当我计算employee对象emp_obj和class employee的大小时,在这两种情况下,我得到了4个字节。 但我不确定这个类的雇员,它将存储在哪里 #include <iostream> using namespace std; class employee { int employee_id; public: emp

我试图在stack overflow和google上找到这个问题的答案,但没有找到答案。 请让我知道,如果有任何问题或重复的问题需要更正

当我计算employee对象emp_obj和class employee的大小时,在这两种情况下,我得到了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;
}
你知道吗

sizeof(emp_obj)
等于

sizeof(employee)
它们都检查employee对象的大小,即4个字节,因为它只包含一个整数,而不考虑其自身的值

emp_obj可能会存储在堆栈中,作为employee类,它是一个类而不是一个对象,因此它不会存储在任何地方。

sizeofemp_obj与sizeofemployee是一样的。sizeof提供该类型对象在内存中所占的大小

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

<>对于对象实际存储的位置,C++不关心。所有C++关注的是对象的生命周期如何管理,自动与动态存储持续时间。这些可以在堆栈和堆中实现,也可以仅在堆中实现,也可以仅在堆栈中实现,这取决于实现

存储在哪个内存段代码/数据段类中

类未存储在执行程序的内存中的任何位置。†

当我计算employee对象emp_obj和class employee的大小时,在这两种情况下,我得到了4个字节

任何类型T的sizeofT应返回类型T对象的大小。因此,给定类型T的对象T,sizeof T和sizeofT的测量值完全相同


†但是,某些类的某些功能,特别是运行时类型信息,确实需要存储。C++标准没有指定存储数据的位置。在运行时内存类型不存储在内存的任何地方。只有它们的实例=对象是可用的。加上静态成员,但这些不在您的代码中。@DanielLangr:这基本上是正确的,但类型的位,例如虚拟函数表和RTTI数据(如果适用)存储在内存中,调试版本通常会存储足够的信息来解释实例。也就是说,是的,类本身大小的概念是没有意义的。大多数C++编译器都会把这个对象存储在main函数的栈框架中。这并不重要,至少只要你不把它弄得太大以至于耗尽了所有的堆叠空间。试试看。请澄清:他们都检查员工对象的大小???问题1:若我不创建对象,那个么它是如何计算类employee的大小的???问题2:没有存储在任何地方???即使是在代码中segment@JitendraRajputA1:根本不在运行时计算大小。编译器知道完整类型的所有对象的大小,所有sizeof表达式都编译为常量值。A2:确实没有存储在任何地方。而且,尺寸的计算也和人们预期的一样。编译器查看employee对象,看到它唯一的数据成员是int,它知道它的大小应该是4。假设我有这个程序,加载器将它加载到内存中准备执行,此时加载器将创建5个内存段代码、数据、bss、堆栈和堆。正如你所说的,它不会存储在任何地方,即使是在代码中???那么,在运行时,它是如何给类员工的大小的?如果它没有被存储??@ JITNEDRARJAJPUT,我已经解释了在第二段中。@ JITNDRARARJPUT:从C++的角度来看,只有三个部分- 2种代码和一种数据。更准确地说,有三种不可互换的指针类型:指向数据、指向函数和指向成员函数。这三个段与您期望的5个段不对齐。