上课需要记忆吗?
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
开销是多少。 通常,您可以通过查看给定平台的运行时行为或编译器或运行时库的代码来解决这个问题。
class
或struct
基本上是一种数据类型(不完全是数据类型(,因此数据类型仅在创建其类型的变量时才会占用内存。因此,class
在实例化时会占用空间。如果class
具有static
成员变量,即使没有实例化,它也会占用空间。
相关文章:
- 松弛原子与无同步情况下的记忆连贯性
- 递归函数有效,但无法记忆
- 如何将记忆应用于此递归函数?
- 共享记忆:让我们谈谈它的特殊性
- 为什么nlohmann不释放记忆
- CPP 中的瓦尔格林德和记忆泄漏:"Conditional jump or move depends on uninitialised values"
- C++17 多态记忆资源不起作用
- 我是否漏了记忆?
- 关于记忆后这种递归关系的时间复杂度
- 记忆栅栏和记忆屏障是一样的吗
- 使用记忆在 C++ 中实现 Knapstack
- 无论如何可以将webm / mp4文件编译/记忆为.exe程序吗?(C++)
- 如何在硬币兑换中添加记忆
- 动态记忆的删除是如何真正起作用的
- C++遗传,记忆问题
- 使用未声明的标识符"nothrow";你是说"扔"吗?记忆
- Qt驱动器下拉列表仅列出USB记忆棒
- 我找不到瓦尔格林德告诉我的记忆链接
- DFS + 记忆解决方案在 LeetCode 上获取 TLE
- 根据呼叫位置进行记忆