课程记忆?

shu*_*014 0 c++ c++11

class Test
{
    int x;
};
int main()
{
   cout << sizeof(Test) ;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:4
我只是想问,即使我没有创建任何类Test的对象为什么它打印4?

Yak*_*ont 5

sizeof(X)X创建时所需的字节数.一个调用new倾向于使用更多的字节用于内存使用开销,但是自动存储(在堆栈或本地或全局或静态等)数组X[N]N*sizeof(X)在实践中占用内存(由于线程的一些额外可能用于函数本地静态安全要求).

它与类型本身占用的内存量无关.

如果类具有未优化的方法,如果它们具有vtable(由使用virtual关键字引起)或类似的,则类本身会使用内存.然后,存储代码或虚拟功能表的存储器可以存在于类的实例的存储器成本之外.

在C++语言本身中,无法确定类本身占用多少内存,也无法确定new开销的可靠方式.您通常可以通过查看给定平台的运行时行为或编译器或运行时库的代码来解决这个问题.