课程记忆?

时间:2016-04-16 14:36:20

标签: c++ c++11

class Test
{
    int x;
};
int main()
{
   cout << sizeof(Test) ;
   return 0;
}

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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