gpt4 book ai didi

C++:不删除对象/总是/内存泄漏吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:59:48 28 4
gpt4 key购买 nike

class MyClass
{
// empty class with no base class
};

int main()
{
MyClass* myClass = new MyClass();

return 0;
}

这是内存泄漏吗?

最佳答案

是的。即使你的类(class)是空的,你仍然会泄漏内存。这有几个原因:

  • 分配永远不会是零长度。您的操作系统不会交回零字节的缓冲区。有一个最小分配大小,如果您分配一个零字节结构,这就是您将获得的大小。 (在我的机器上,它是 16 个字节。)
  • 即使存在零长度分配,对象在系统上也至少有 1 个字节大(其中一个字节的大小与 char 的大小相同)。
  • 即使您确实获得了零长度分配,您的操作系统也必须跟踪此分配。为此,它使用更多字节将地址映射到其分配详细信息。这具有恒定大小的内存开销,您每次分配内存时都会得到。

因此,即使您的结构为空,您的代码至少会泄漏一个字节的内存以及分配细节。

关于C++:不删除对象/总是/内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6804849/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com