上课需要记忆吗?

Do classes take memory?

本文关键字:记忆      更新时间:2023-10-16
class Test
{
    int x;
};
int main()
{
   cout << sizeof(Test) ;
   return 0;
}

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

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

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

如果

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

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

classstruct基本上是一种数据类型(不完全是数据类型(,因此数据类型仅在创建其类型的变量时才会占用内存。因此,class在实例化时会占用空间。如果class具有static成员变量,即使没有实例化,它也会占用空间。